基于二叉链表的存储格式,输入二叉树的先序序列,用*代表空节点,如ABD**CE***F**建立二叉树,然后中序遍历二叉树,输出节点的值。
时间: 2023-11-20 12:07:49 浏览: 51
根据引用中的第1关,我们可以先序遍历输入的序列,根据先序遍历的顺序建立二叉树。具体步骤如下:
1. 如果输入的节点值为*,则表示该节点为空节点,返回NULL。
2. 否则,新建一个节点,将该节点的值设为当前输入的节点值。
3. 递归调用建立左子树的函数,将该节点的左子树设为递归返回的节点。
4. 递归调用建立右子树的函数,将该节点的右子树设为递归返回的节点。
5. 返回该节点。
根据引用中的第2关,我们可以计算出二叉树的总节点个数和叶子节点个数。具体步骤如下:
1. 如果当前节点为空节点,返回0。
2. 否则,递归计算左子树的节点个数和叶子节点个数。
3. 递归计算右子树的节点个数和叶子节点个数。
4. 如果当前节点为叶子节点,叶子节点个数加1。
5. 节点个数加1。
6. 返回节点个数和叶子节点个数。
根据引用中的第3关,我们可以层次遍历二叉树。具体步骤如下:
1. 新建一个队列,将根节点入队。
2. 当队列不为空时,执行以下操作:
1) 取出队首节点,输出该节点的值。
2) 如果该节点有左子树,将左子树入队。
3) 如果该节点有右子树,将右子树入队。
根据引用中的第4关和第5关,我们可以分别递归和非递归地实现二叉树左右子树交换。具体步骤如下:
1. 如果当前节点为空节点,返回NULL。
2. 否则,递归交换左子树和右子树。
3. 将当前节点的左子树和右子树交换。
非递归实现二叉树左右子树交换的具体步骤如下:
1. 新建一个栈,将根节点入栈。
2. 当栈不为空时,执行以下操作:
1) 取出栈顶节点,交换该节点的左子树和右子树。
2) 如果该节点有右子树,将右子树入栈。
3) 如果该节点有左子树,将左子树入栈。