已知二叉树的后序和中序,求前序遍历

参考博客http://blog.csdn.net/baidu_21578557/article/details/51175149

(已知二叉树的前序和中序,求后序)

和上面博客几乎完全一样,哈哈哈(偷笑)

 

 

大概思路:

  1. 通过后序序列确定根节点,根节点为后序序列的最后一个元素。
  2. 在中序序列中找出后序序列的最后一个元素,把中序序列分成左子树和右子树两部分。
  3. 递归1和2.

     

 1 #include <iostream>
 2 
 3 typedef struct TreeNode
 4 {
 5     char elem;
 6     struct TreeNode *left;
 7     struct TreeNode *right;
 8 }TreeNode;
 9 
10 TreeNode * initTree(char *behind, char *middle, int num)
11 {
12     if(num == 0)
13         return NULL;
14     TreeNode *root = new struct TreeNode;
15     root->elem = behind[num-1];
16 
17     int i = 0;
18     for(i = 0; i < num; i++)
19     {
20         if( middle[i] == root->elem)
21             break;
22     }
23 
24     std::cout << root->elem << std::endl;
25     root->left = initTree(behind, middle, i);
26     root->right = initTree(behind+i, middle+i+1, num-i-1);
27 
28 
29 
30     return root;
31 }
32 
33 int main()
34 {
35     char *behind = "DGJHEBIFCA";
36     char *middle = "DBGEHJACIF";
37     initTree(behind, middle, 10);
38     return 0;
39 }

 

posted on 2017-05-31 22:05  xdzhanght  阅读(971)  评论(0编辑  收藏  举报

导航