根据中序序列与后序序列构建二叉树
2017-10-23 18:44
686 查看
算法如下:
1)先在后序序列中找到根结点,
2)在中序序列中找到根结点位置,(可以将二叉树分为左子树和右子树)
3)用同样的办法构造左子树 。
4)用同样的办法构造右子树。
算法如下:
关于二叉树构建与遍历请详见我的之前的博客:二叉树的构建及其遍历算法
对于根据先序序列与中序序列构建二叉树的算法也请详见我之前的博客:
根据先序序列与中序序列构建二叉树
1)先在后序序列中找到根结点,
2)在中序序列中找到根结点位置,(可以将二叉树分为左子树和右子树)
3)用同样的办法构造左子树 。
4)用同样的办法构造右子树。
算法如下:
BinaryTree* Creat_Node(char ch) { BinaryTree* root; root = new BinaryTree; root->data = ch; root->lchild = root->rchild = NULL; return root; } BinaryTree* Mid_Post_Create_Pre(char* mid,char*post,int N) { if(!mid||!post||N<0){ cout<<"输入出错!"<<endl; return NULL; } int root_index = 0; for(root_index = 0 ; root_index < N ; root_index++){ if(mid[root_index] == post[N-1]){ break; } } if(root_index == N){ cout<<"中序序列与后序序列不匹配!"<<endl; return NULL; } BinaryTree* root = this->Creat_Node(post[N-1]); if(root_index > 0){ root->lchild = root->Mid_Post_Create_Pre(mid,post,root_index); } if(N-root_index-1 > 0){ root->rchild = root->Mid_Post_Create_Pre(mid+root_index+1,post+root_index,N-root_index-1); } return root; }
关于二叉树构建与遍历请详见我的之前的博客:二叉树的构建及其遍历算法
对于根据先序序列与中序序列构建二叉树的算法也请详见我之前的博客:
根据先序序列与中序序列构建二叉树
相关文章推荐
- 某国内IT大牌名企校招笔试 + 树的学习—(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)
- 树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)
- 【构建二叉树】01根据前序和中序序列构造二叉树【Construct Binary Tree from Preorder and Inorder Traversal】
- 根据先序序列与中序序列构建二叉树
- 【构建二叉树】02根据中序和后序序列构造二叉树【Construct Binary Tree from Inorder and Postorder Traversal】
- 树的学习——(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)
- 根据先中序序列或后中序序列确定二叉树
- 根据树的后序和中序序列或者前序和中序序列构建二叉树,
- 根据先序/中序或后序/中序构建二叉树基本算法分析
- 《剑指offer》根据先序序列与中序序列重建二叉树-Java
- 根据前序和中序构建二叉树
- 根据先序遍历序列和中序遍历序列重建二叉树
- C++ 根据前序遍历序列和中序遍历序列可以构造唯一的二叉树
- 算法--根据二叉树前序和中序遍历序列,求后续遍历序列
- 根据前序和中序遍历序列重构二叉树 代码完整版
- 如何根据前序遍历序列和中序遍历序列确定二叉树
- 基于先序遍历和中序遍历序列构建二叉树结构【C语言】
- 根据二叉树的前序和中序构建二叉树
- 机试指南-根据二叉树的前序和中序确定后序序列
- 中序和前序序列构建二叉树