已知二叉树的后序和中序,求前序遍历
参考博客http://blog.csdn.net/baidu_21578557/article/details/51175149
(已知二叉树的前序和中序,求后序)
和上面博客几乎完全一样,哈哈哈(偷笑)
大概思路:
- 通过后序序列确定根节点,根节点为后序序列的最后一个元素。
- 在中序序列中找出后序序列的最后一个元素,把中序序列分成左子树和右子树两部分。
- 递归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 }