zoukankan      html  css  js  c++  java
  • 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 修改默认的user表和默认的认证系统
    django 'WSGIRequest' object has no attribute 'user'
    python scrapy简单爬虫记录(实现简单爬取知乎)
    python 文件操作的注意事项
    windows cmd命令
    数据库便捷的软件
    BCB Access violateion at Address 0000 0003. Read of address 0000 0003
    C++Builder6.0 新建和打开项目软件死机
    163邮箱账号
    使用 MtVerify.h头文件 ,用的时候把他头文件的内容添加到项目
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10623998.html
Copyright © 2011-2022 走看看