美文网首页
leetcode 先序遍历构造二叉树 -- 递归

leetcode 先序遍历构造二叉树 -- 递归

作者: 夏liao夏天 | 来源:发表于2019-10-19 09:50 被阅读0次

返回与给定先序遍历 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]


image.png

先序遍历是先遍历根结点,再遍历左子树,最后遍历右子树。左子树的结点都会小于根结点,右子树的结点都会大于根结点。因此先找到左子树与右子树的分界点,再分别递归建立左子树和右子树。

class Solution {
public:
    int find_lower_bound(vector<int> preorder, int cur){
        int lower_bound = cur;
        for(int i=cur+1;i<preorder.size();i++){
            if(preorder[i]<preorder[cur]){
                lower_bound = i;
            }
        }
        return lower_bound;
    }
    TreeNode* bst(vector<int> preorder, int cur,int right_bound){
        int lower_bound = find_lower_bound(preorder, cur);
        TreeNode* root = new TreeNode(preorder[cur]);
        if(cur < lower_bound){
            root->left = bst(preorder, cur+1, lower_bound);
        }
        if(lower_bound < right_bound){
            root->right = bst(preorder, lower_bound+1, right_bound);
        }
        return root;
    }
    TreeNode* bstFromPreorder(vector<int>& preorder) {
        return bst(preorder,0,preorder.size()-1);
    }
};

题目链接:https://leetcode-cn.com/problems/construct-binary-search-tree-from-preorder-traversal/

相关文章

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 二叉树的前中后序遍历 Java递归与非递归实现

    1. 二叉树的定义 构造二叉树 2. 二叉树的递归遍历 2.1 二叉树递归先序遍历 2.2 二叉树递归中序遍历 2...

  • 记一次Tree的遍历

    统计利用先序遍历创建的二叉树的深度 利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方...

  • 二叉树的操作

    /*主要内容:1、实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式*/ 实现二叉树的先序、中序、后序遍历...

  • 二叉树先序、中序、后序遍历 递归与非递归 Python实现 1.先序遍历:根节点->左子树->右子树 2.中序遍历...

  • Leetcode二叉树题目分类(长期更新)

    树的遍历构造 Leetcode 105. 从前序与中序遍历序列构造二叉树(分治算法)Leetcode 106. 从...

  • LeetCode-105-从前序与中序遍历序列构造二叉树

    LeetCode-105-从前序与中序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树[https:/...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • Java二叉树的遍历

    Java二叉树的遍历 利用递归和非递归实现二叉树的先序,中序,后序遍历以及使用队列实现二叉树的层次遍历

  • python遍历二叉树

    定义二叉树: 构建二叉树: BFS: 先序遍历:1.递归版本: 2.非递归版本: 中序遍历: 1.递归版本 2.非...

网友评论

      本文标题:leetcode 先序遍历构造二叉树 -- 递归

      本文链接:https://www.haomeiwen.com/subject/tbegmctx.html