day20 | 二叉搜索树的中序遍历是有序的

654. 最大二叉树

最大值是根节点,找到根节点后递归构建

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return dfs(nums, 0, nums.size()); // 左闭右开
    }

    TreeNode* dfs(vector<int>& nums, int L, int R)
    {
        if (L >= R) return nullptr;
        // 找到当前的根节点
        int maxIdx = L;
        for (int i = L + 1; i < R; i ++)
        {
            if (nums[i] > nums[maxIdx])
            {
                maxIdx = i;
            }
        }

        TreeNode* root = new TreeNode(nums[maxIdx]);
        root->left = dfs(nums, L, maxIdx);
        root->right = dfs(nums, maxIdx + 1, R);

        return root;
    }
};

617. 合并二叉树

左左和右右,如果为空就空,要触发return条件

class Solution {
public:
    // 一起遍历
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        return dfs(root1, root2);
    }

    TreeNode* dfs(TreeNode* root1, TreeNode* root2)
    {
        if (root1 == nullptr && root2 == nullptr) return nullptr;
        // 当前节点相加
        TreeNode* root = new TreeNode(0);
        if (root1) root->val += root1->val;
        if (root2) root->val += root2->val;

        // 左左  右右
        TreeNode* p1 = root1;
        TreeNode* p2 = root2;
        if (root1) p1 = root1->left;
        if (root2) p2 = root2->left;
        // 左左
        root->left = dfs(p1, p2);

        // 右右
        p1 = root1;
        p2 = root2;
        if (root1) p1 = root1->right;
        if (root2) p2 = root2->right;
        root->right = dfs(p1, p2);

        return root;
    }
};

700. 二叉搜索树中的搜索

可以抓住二叉搜索树的特点:左小右大。
dfs的时候判断下方向即可。

class Solution {
public:
    int val;
    bool flag = false;
    TreeNode* res;
    TreeNode* searchBST(TreeNode* root, int val_) {
        val = val_;
        dfs(root);
        return res;
    }

    void dfs(TreeNode* root)
    {
        if (root == nullptr) return;
        if (flag) return;
        if (root->val == val) 
        {
            flag = true;
            res = root;
            return;
        }
        if(root->val > val) dfs(root->left);
        if(root->val < val) dfs(root->right);
    }
};

98. 验证二叉搜索树

中序遍历是有序的

class Solution {
public:
    vector<int> nums;
    bool isValidBST(TreeNode* root) {
        dfs(root);
        for (int i = 1; i < nums.size(); i ++)
        {
            if (nums[i] <= nums[i-1])
                return false;
        }
        return true;
    }

    void dfs(TreeNode* root)
    {
        if (root == nullptr) return;
        dfs(root->left);
        nums.push_back(root->val);
        dfs(root->right);
    }
};
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇