LeetCode 450 删除二叉搜索树中的节点[dfs] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 450 删除二叉搜索树中的节点[dfs] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。



解题思路:
非常容易的一道dfs题目,根据key的值判断是否在当前的根路径下,小了往左子树走,大了往右子树走,相等又有三个判断条件,只有右子树返回右子树,只有左子树返回左子树,都有就要将右子树最左子节点安插到根节点的左子树的上面,然后将根更换为右子树的根 ,代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode 
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) 
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) 
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) 
 * ;
 */
class Solution 
public:
    TreeNode* deleteNode(TreeNode* root, int key) 
        // 根为空
        if(root == nullptr) return nullptr;
        // 根的值大了,往左子树找
        else if(root->val > key) root->left = deleteNode(root->left, key);
        else if(root->val < key) root->right = deleteNode(root->right, key);
        // 找到key所在节点
        else 
            if(root->left == nullptr) return root->right;
            if(root->right == nullptr) return root->left;
            TreeNode * node = root->right;
            while(node->left) 
                node = node->left;
            
            node->left = root->left;
            root = root->right;
        
        return root;
    
;

以上是关于LeetCode 450 删除二叉搜索树中的节点[dfs] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] 树 - 删除二叉搜索树中的节点, leetcode 450

LeetCode Java刷题笔记— 450. 删除二叉搜索树中的节点

LeetCode 二叉树专项删除二叉搜索树中的节点(450)

Leetcode刷题Python450. 删除二叉搜索树中的节点

⭐算法入门⭐《二叉树 - 二叉搜索树》中等05 —— LeetCode 450. 删除二叉搜索树中的节点

LeetCode 450 删除二叉搜索树中的节点[dfs] HERODING的LeetCode之路