剑指offer 重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

代码:

 1 class Solution {
 2 public:
 3     TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
 4         int length = pre.size(), temp;
 5         if(length == 0) return NULL;
 6         vector<int> l_pre, l_vin, r_pre, r_vin;
 7         for(int i = 0; i < length; i ++) {
 8             if(vin[i] == pre[0]){
 9                 temp = i;break;
10             }
11         }
12         for(int i = 0; i < temp; i ++) {
13             l_pre.push_back( pre[i + 1] );
14             l_vin.push_back( vin[i] );
15         }
16         for(int i = temp + 1; i < length; i ++){
17             r_pre.push_back( pre[i] );
18             r_vin.push_back( vin[i] );
19         }
20         TreeNode* head = new TreeNode(pre[0]);
21          
22         head ->left = reConstructBinaryTree( l_pre, l_vin );
23         head ->right = reConstructBinaryTree( r_pre, r_vin );
24          
25         return head;
26     }
27 };

我的笔记:通过对数的前序和中序遍历序列,来还原整个二叉树。详解可见本人另一篇博客:https://www.cnblogs.com/john1015/p/12906507.html

posted @ 2020-05-17 19:53  John_yan15  阅读(171)  评论(0编辑  收藏  举报