(数据结构)二叉树的查找有深度优先和广度优先,深度优先包括
A、前序遍历、后序遍历、中序遍历B、前序遍历、后序遍历、层次遍历
C、前序遍历、中序遍历、层次遍历D、中序遍历、后序遍历、层次遍历
面试题:重建二叉树
题目:输入某二叉树的序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出图2.6所示的二叉树并输出它的头结点。二叉树结点的定义如下:
struct Binary Tree Node
{
int m_nValue;
BinaryTreeNode*m_pLeft;
BinaryTreeNode*m_pRight;
};
针对一棵前序线索二叉树:
(1)仿照中序线家二叉树,定义前序线索二叉树的类结构;
(2)编写算法,实现二叉树到前序线索二叉树的转换;
(3)编写算法,在以1为根的子树中求指定结点p的父结点;
(4)编写算法,求以t为根的子树的前序下的第一个结点
(5)编写算法,求以t为根的子树的前序下的最后一个结点;
(6)编写算法,求结点t的前序下的后继结点:
(7)编写算法,求结点t的前序下的前驱结点;
(8)编写算法,实现前序线索二叉树的前序遍历.
(1)沿袭5-60题使用逆转链遍历二叉树的思想。
(2)不使用tag标志,而是用内嵌的栈代替tag的作用。该内嵌的栈使用了叶结点作为栈的结构,没有另外定义栈的存储空间。
(3)利用栈解决在回溯时分辨究竟是从左子树还是右子树上升的问题,步骤是:
①当进入有非空左子树的结点的右子树时,将该结点的地址进栈。
②在回溯过程中如遇到结点的左、布子树都非空时,如果该结点就是存于栈顶的结点,则可判定当前是从该结点的右子树退回,该结点的右子女指针指向它的父结点;否则当前是从该结点的左子树退回,该结点的左子女指向它的父结点。