• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
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;
    }
};

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

posted on 2019-03-29 21:22  村雨sup  阅读(316)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3