zoukankan      html  css  js  c++  java
  • LeetCode106. 从中序与后序遍历序列构造二叉树

    题目

    代码

     1 class Solution {
     2 public:
     3    
     4     TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
     5         //第一步
     6         if(postorder.size() == 0) return NULL;
     7 
     8         //第二步,后序数组的最后一个元素就是当前元素
     9         int rootValue = postorder[postorder.size()-1];
    10         TreeNode *root = new TreeNode(rootValue);
    11         if(postorder.size() == 1) return root; //只有一个根节点
    12 
    13         //第三步,找到后序数组最后一个元素在中序数组的位置,作为切割点
    14         int Index;
    15         for(Index = 0;Index < inorder.size();Index++){
    16             if(inorder[Index] == rootValue) break;
    17         }
    18         
    19         //第四步,切割中序数组,得到中序左数组、中序右数组
    20         //采用左闭右开,[0,Index)
    21         vector<int>leftInorder(inorder.begin(),inorder.begin()+Index);
    22         //[Index+1,end)
    23         vector<int>rightInorder(inorder.begin()+Index+1 ,inorder.end());
    24 
    25         //第五步,切割后序数组,得到后序左数组,后序右数组
    26         postorder.pop_back(); //舍弃最后一个元素 postorder.erase(postorder.end()-1) 参数为迭代器 
    27         //采用左闭右开
    28         //[0,leftInorder.size)
    29         vector<int>leftPostorder(postorder.begin(),postorder.begin()+leftInorder.size());
    30         //[leftInorder.size,postorder.size)
    31         vector<int>rightPostorder(postorder.begin()+leftInorder.size(),postorder.end());
    32 
    33         //第六步,递归处理左、右
    34         root->left = buildTree(leftInorder,leftPostorder);
    35         root->right = buildTree(rightInorder,rightPostorder);
    36         return root;
    37     }
    38 };

    注意:

    1.stl 中 vector 赋初值的方法 :https://www.cnblogs.com/quyc/p/12857054.html

    2. stl 中的容器和算法都是左闭右开的 https://www.zhihu.com/question/61054439

  • 相关阅读:
    矩阵快速幂
    快速排序
    用闭包来实现命令模式
    闭包和面向对象设计
    闭包及其作用
    阿里笔试
    如何在节点上添加样式
    getComputedStyle与currentStyle获取样式(style/class)
    今日头条笔试
    牛客网JavaScript编程规范
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14514479.html
Copyright © 2011-2022 走看看