已知一棵二叉树的先序遍历序列为EBADCFHGIKJ,中序遍历序列为ABCDEFGHIJK。请画出该二叉树。
解题思路:先序遍历序列中第一个结点E必是根结点,找到根结点后再到中序遍历序列中确定左、右子树的结点值,结点E左边的结点序列是左子树的各个结点,结点E右边的结点序列是右子树的各个结点;然后再到先序遍历序列中找左、右子树的根结点,重复上述过程直到得到一棵确定的二叉树。本例所得二叉树如图所示。
二叉树以二叉链表存储,写出对二叉树进行先序遍历的非递归算法。
解题思路:二叉树的先序遍历非递归算法利用栈结构,从二又树的根结点开始,输出结点信息,同时将结点指针入栈,然后顺着左子树,依次将其左子树各个结点值输出,同时结点指针入栈,直到左子树为空;然后让栈顶指针出栈,接着处理右子树。
二叉树结点数值采用顺序存储结构,如图所示。
①画出二叉树表示。
②写出前序遍历,中序遍历和后序遍历的结果。
③写出值为c的结点的父结点及其左、右孩子。
④画出把此二叉树还原成森林的图。
再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树。试写出执行这种双序遍历的算法。
解题思路:本题就是在一个二叉链表中查找指定的结点x的过程。可以利用二叉树的任意一种遍历方法进行查找。这里利用先序遍历方法,首先判断当前结点是否是要查找的结点,如果是,则查找成功,返回结点的地址;如果不是,则分别到它的左子树和右子树中进行查找。