篇一:二叉树-遍历终极版
篇二:二叉树-创建、重建、转化
篇三:二叉树-详解二叉排序树
篇四:二叉树-详解平衡二叉树AVL
篇五:二叉树-常见简单算法题
对于二叉树的创建,一般我们只熟悉最简单的二叉树创建方式,即逐个输入节点,然后按照先序遍历或者中序、后序遍历方式来递归建立二叉树。但是,光掌握这个是不够的,我们还得掌握二叉树的重建(先序中序重建二叉树,后序中序重建二叉树),数组转换为二叉树,链表转换为二叉树等等。
1、最简单的创建方式
我们可以根据先序遍历递归创建二叉树,当然也可以中序或者后序遍历方式创建二叉树。
//创建二叉树
BTress CreateTree(BTress &T)
{
char a;
cin>>a;
if(a=='0')
T=NULL;
else
{
T=new BNode();
T->data=a;
CreateTree(T->LChild);
CreateTree(T->RChild);
}
return T;
}
2、根据前序序列和中序序列建二叉树
根据二叉树的前序后中序遍历的结果来重建二叉树。
前序:A B D E H I C F G
中序:D B H E I A F C G
怎么做了?注意,前序遍历第一个节点A肯定是根节点;那么,我们可以在中序遍历中找到这个根节点A,那么中序遍历中根节点A左边的点(D B H E I)就是A的左子树的节点,右边的点(F C G)就是A节点右子树的节点。再看前序遍历的节点B,对于节点B也是一样,中序遍历中根节点B左边的点(D)就是B的左子树的节点,右边的点(H E I)就是B节点右子树的节点………
根据上述这种思想递归下去,可以逐步找到每个点的位置,然后就可以将树建立起来,具体看代码(是leetcode上的题)
代码:
class Solution {