zoukankan      html  css  js  c++  java
  • [leetcode]Construct Binary Tree from Preorder and Inorder Traversal

    从前序中序遍历来重构二叉树

    经典题,从期末考试到考研什么的应该都有

    前序遍历第一个肯定是root

    在inorder里面去找root

    左边的是leftsubtree , 右边的是rightsubtree

    然后preorder除去order,后面lifetsubtree.size 个是左边的, rightsubtree.size个是右边的

    递归构造tree就好了

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        template<typename Iter>
        TreeNode* make(Iter pFirst , Iter pLast , Iter iFirst , Iter iLast) {
            if(pFirst == pLast) return nullptr;
            if(iFirst == iLast) return nullptr;
            int val = *pFirst;
            auto iRoot = find(iFirst , iLast , val);
            TreeNode* root = new TreeNode(*iRoot);
            int leftSize = iRoot - iFirst;
            root -> left = make(pFirst+1 , pFirst+leftSize+1 , iFirst , iRoot);
            root -> right = make(pFirst+leftSize+1 , pLast , iRoot + 1 , iLast);
            return root;
        }
        TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
            int size = inorder.size();
            if(size == 0) return nullptr;
            return make(preorder.begin() , preorder.end() , inorder.begin() , inorder.end());
        }
    };
  • 相关阅读:
    iOS 数据存储
    iOS 中@property() 括号中,可以填写的属性?
    iOS 中关闭键盘方法
    iBeacons 资源汇总
    iOS7 下去掉状态栏(全屏)
    监听器HttpSessionListener
    监听器 HttpSessionBindingListener
    servlet 3.0 的使用
    工厂模式小例子 getDaoImp
    servlet和filter初始化
  • 原文地址:https://www.cnblogs.com/x1957/p/3519452.html
Copyright © 2011-2022 走看看