• Leetcode 1008. 先序遍历构造二叉树


    1008. 先序遍历构造二叉树

     
     
    • 用户通过次数169
    • 用户尝试次数183
    • 通过次数171
    • 提交次数247
    • 题目难度Medium

    返回与给定先序遍历 preorder 相匹配的二叉搜索树(binary search tree)的根结点。

    (回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于 node.left 的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,先序遍历首先显示节点的值,然后遍历 node.left,接着遍历 node.right。)

    示例:

    输入:[8,5,1,7,10,12]
    输出:[8,5,10,1,7,null,12]
    

    提示:

    1. 1 <= preorder.length <= 100
    2. 先序 preorder 中的值是不同的。
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        
        TreeNode* dfs(vector<int> v,int start,int end){
            if(start > end) return NULL;
            TreeNode* p = new TreeNode(v[start]);
            if(start == end) return p;
            int cnt=start;
            for(int i=start+1;i <= end;i++){
                if(v[i]<v[start])cnt = i;
                else break;
            }
            p->left = dfs(v,start+1,cnt);
            p->right = dfs(v,cnt+1,end);
            return p;
        }
        
        
        TreeNode* bstFromPreorder(vector<int>& preorder) {
            return dfs(preorder,0,preorder.size()-1);
        }
    };

    _我写的和大佬写的

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* bstFromPreorder(vector<int>& a) {
            int n = a.size();
            if (n == 0) return NULL;
            TreeNode *it = new TreeNode(a[0]);
            vector<int> L, R;
            for (auto x : a)
            {
                if (x < a[0]) L.push_back(x);
                if (x > a[0]) R.push_back(x);
            }
            it->left = bstFromPreorder(L);
            it->right = bstFromPreorder(R);
            return it;
        }
    };

    ——这写法也太吊了吧,太美了!

  • 相关阅读:
    Django Web开发学习笔记(1)
    SessionFactory 执行原生态的SQL语句
    Java中使用FileputStream导致中文乱码问题的修改方案
    JavaScript中的namespace
    SpringMVC配置文件
    Python 贝叶斯分类
    Struct(二)
    Struct2 (一)
    SpingMVC ModelAndView, Model,Control以及参数传递
    window.onload
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10623998.html
Copyright © 2020-2023  润新知