利用层次遍历原理构建二叉树

层次遍历构建二叉树:

1.定义二叉树节点:

1 function TreeNode(val){
2     this.val = val;
3     this.left = this.right = null;
4 }

2.层次遍历构建二叉树:

 1 function createTree(arr){
 2     if(!arr||!arr.length)return null;
 3     var root = new TreeNode(arr.shift());
 4     var list = [root];
 5     while(arr.length){
 6         var tmpList = [];
 7         for(var i=0;i<list.length;i++){
 8             var p = list[i];
 9             var left = arr.shift();
10             if(left!==null){
11                 p.left = new TreeNode(left);
12             }
13             var right = arr.shift();
14             if(right!==null){
15                 p.right = new TreeNode(right);
16             }
17             if(p.left){
18                tmpList.push(p.left);
19             }
20             if(p.right){
21                tmpList.push(p.right);
22             }
23         }
24         list = tmpList;
25     }
26     return root;
27 }

  

3.测试

//var arr = [1,2,2,3,4,4,3];
var arr = [1,2,2,null,3,null,3];
var root = createTree(arr);
console.log(root);

 

4 . 改善,一层循环 + 一个队列就可以了

C++实现:

 1 TreeNode* createTree(const std::vector<int> vec) {
 2     TreeNode* root = new TreeNode();
 3     std::queue<TreeNode*> queue_nodes;
 4     queue_nodes.push(root);
 5     int i = 1, size = vec.size();
 6     TreeNode *cur = root;
 7     cur -> val = vec.front();
 8     while (!queue_nodes.empty() && i < size) {
 9         cur = queue_nodes.front();
10         queue_nodes.pop();
11         if (vec[i] != INT_MIN) {
12             TreeNode *left = new TreeNode();
13             left->val = vec[i];
14             cur->left = left;
15             queue_nodes.push(left);
16         }
17         if (i + 1 < size) {
18             ++i;
19             if (vec[i] != INT_MIN) {
20                 TreeNode *right = new TreeNode();
21                 right->val = vec[i];
22                 cur->right = right;
23                 queue_nodes.push(right);
24             }
25         }
26         ++i;
27     }
28     return root;
29 }
30 
31 std::vector<int> vec{5, 3, 6, 2, 4, INT_MIN, INT_MIN, 1};
32 TreeNode *root = createTree(vec);

 

posted on 2018-05-13 09:44  DavidXu2014  阅读(5524)  评论(0编辑  收藏  举报