由前序遍历序列和中序遍历序列重建二叉树
2014-12-16 21:24
351 查看
#include "iostream" using namespace std; typedef char ELEM_TYPE; typedef unsigned char INT8U; typedef unsigned short int INT16U; typedef struct BiTNode { ELEM_TYPE data; struct BiTNode *lchild; struct BiTNode *rchild; }Node,*pNode; pNode rebulid(ELEM_TYPE* pre_str,ELEM_TYPE* in_str,INT16U node_num);//pPRoot 根节点的地址的地址 void PostOrderTraverse(pNode pRoot); int main(void) { pNode pRoot = rebulid("ABCEDFGH","ECBDAGFH",8); PostOrderTraverse(pRoot); return 0; } int get_root_pos(ELEM_TYPE* str,ELEM_TYPE ch) { int pos = 0; while(ch!=*str && '\0'!=*str) { str++; pos++; } if('\0'==*str) return -1; else return pos; } pNode rebulid(ELEM_TYPE* pre_str,ELEM_TYPE* in_str,INT16U node_num) { pNode pRoot = new Node; if(NULL==pRoot || 0==node_num) { return NULL; } else { INT16U root_pos = get_root_pos(in_str,pre_str[0]); //得到根节点在中序遍历中的位置 pRoot->data = pre_str[0]; if(root_pos >= node_num-1) { pRoot->rchild = NULL; } if(0 == root_pos) { pRoot->lchild = NULL; } pRoot->lchild = rebulid(&pre_str[1],&in_str[0],root_pos); pRoot->rchild = rebulid(&pre_str[root_pos+1],&in_str[root_pos+1],node_num-root_pos-1); return pRoot; } } void PostOrderTraverse(pNode pRoot) { if(NULL == pRoot) { return; } else { PostOrderTraverse(pRoot->lchild); PostOrderTraverse(pRoot->rchild); cout<<pRoot->data; } }
树的前序遍历:ABCEDFGH
树的中序遍历:ECBDAGFH
程序运行结果:树的后序遍历见下图
相关文章推荐
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 根据前序遍历序列和中序遍历序列重建二叉树
- 重建二叉树(前序遍历和中序遍历)
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 027根据前序遍历和中序遍历,重建二叉树(keep it up)
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 如何利用前序遍历序列和中序遍历序列非递归的创建二叉树
- 根据二叉树的前序遍历和中序遍历的结果,重建二叉树
- ~由前序遍历和中序遍历重建二叉树~
- 由前序遍历和中序遍历重建二叉树