根据中序遍历和先序遍历,后序遍历创建二叉树。
2017-03-16 10:15
337 查看
根据先序遍历和中序遍历创建二叉树
分析过程char *VLR = “ABCDEFGH”;
char *LVR = “CBEDFAGH”;先序遍历是 ABCDEF,中序遍历是CBEDFAGH
先序遍历先是根节点,则A是根节点,此时根据中序遍历可以知道左孩子是CBEDF,右孩子是GH,递归下去可以知道整个二叉树的结构
2.代码:
void CreateBinTree_5(BinTreeNode *&t, char *VLR, char *LVR, int n) { if(n == 0) //如果字符长度是0,则证明没有二叉树 t = NULL; else { int k = 0; //在中序遍历中寻找根节点 while(VLR[0] != LVR[k]) k++; //此时找到了根节点 t = (BinTreeNode*)malloc(sizeof(BinTreeNode)); assert(t != NULL); t->data = LVR[k]; //创造根节点赋值 CreateBinTree_5(t->leftChild,VLR+1,LVR,k);//创建左孩子,左孩子的长度是k CreateBinTree_5(t->rightChild,VLR+k+1,LVR+k+1,n-k-1);//创建右孩子,长度是n-k-1 } }
根据中序遍历和后序遍历创建二叉树
分析过程char *LVR = “CBEDFAGH”
char *LRV = “CEFDBHGA”
- 第一步先找到根节点,可以由后序遍历可以知道根节点是A,位置设为k - 根据中序遍历知道左子树是CBEDF,长度是k,根据中序遍历和后续遍历进行递归 - 根据中序遍历知道右子树是GH,长度是n-k-1,根据中序遍历和后续遍历进行递归
代码
void CreateBinTree_6(BinTreeNode *&t, char *LVR, char *LRV, int n) { if(n == 0) t = NULL; else { int k = 0; while(LRV[n-1] != LVR[k]) k++; t = (BinTreeNode*)malloc(sizeo 4000 f(BinTreeNode)); assert(t != NULL); t->data = LVR[k]; CreateBinTree_6(t->rightChild,LVR+k+1,LRV+k,n-k-1); //继续找右孩子 CreateBinTree_6(t->leftChild,LVR,LRV,k); //找左孩子 } }
相关文章推荐
- 二叉树的创建(先序创建的)及先序遍历 中序遍历 后序遍历的递归和非递归实现
- 已知二叉树先序遍历,中序遍历创建二叉树并输出后序遍历
- 创建一个二叉树(先序遍历、中序遍历、后序遍历)
- C++ 二叉树实现 创建,先序遍历,中序遍历,后序遍历
- 二叉树的创建,先序遍历,中序遍历,后序遍历
- [leetcode]_根据二叉树的先序遍历(后序遍历) + 中序遍历 重建二叉树
- 二叉树创建、先序遍历、中序遍历、后序遍历、树深度
- 数据结构--二叉树的创建、先序遍历、中序遍历、后序遍历、深度、叶子结点数
- 一个关于二叉树的创建、先序遍历、中序遍历、后序遍历、求叶子节点的完整函数的c语言完整程序。
- 根据二叉树的中序遍历和后序遍历创建 一棵二叉树,并且返回所创建的树的树高,具体方法请参见下面源码(经过调试,无任何bug存在)
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树的遍历(2)--先序遍历,中序遍历,后序遍历(非递归)
- 二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
- 二叉树先序遍历中序遍历建立二叉树然后后序遍历
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树先序遍历、中序遍历、后序遍历
- 二叉树的创建、前序遍历、中序遍历、后序遍历
- 二叉树的先序遍历、中序遍历、后序遍历、层次遍历的递归实现
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果