首页 > 其他分享 >450. 删除二叉搜索树中的节点c

450. 删除二叉搜索树中的节点c

时间:2024-03-07 13:36:09浏览次数:22  
标签:right TreeNode struct val 450 树中 二叉 root left

这题特别好,和递归删除链表里的元素有异曲同工之妙

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
struct TreeNode* leftleave(struct TreeNode* root){
    root=root->left;
    while(root && root->right) root=root->right;
    return root;
}


struct TreeNode* deleteNode(struct TreeNode* root, int key){
    if(!root) return NULL;
    if(root->val > key){
        root->left=deleteNode(root->left,key);
    }else if(root->val <key){
        root->right=deleteNode(root->right,key);
    }else{
        if(!root->left&&!root->right){
            free(root);
            return NULL;
        }
        if(root->left){
            struct TreeNode* temp=leftleave(root);
            root->val=temp->val;
            root->left=deleteNode(root->left,temp->val);
        }else{
            struct TreeNode* temp=root;
            root=root->right;
            free(temp);
        }
    }
    return root;
}

结果:

标签:right,TreeNode,struct,val,450,树中,二叉,root,left
From: https://www.cnblogs.com/llllmz/p/18058692

相关文章

  • 二叉树中的最大路径和
    124.二叉树中的最大路径和二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root......
  • 701. 二叉搜索树中的插入操作c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*insertIntoBST(structTreeNode*root,intval){if(!root){structTreeNode*......
  • 235. 二叉搜索树的最近公共祖先c
     /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*preorder(structTreeNode*root,structTreeNode*p,structTreeNode*q){if(!root)r......
  • 236. 二叉树的最近公共祖先c
    思想就是层次遍历,然后判断每个节点是否为父节点、/***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/booljudge(structTreeNode*root,structTreeNode*q){if(......
  • 代码随想录算法训练营day14 | leetcode 144. 二叉树的前序遍历、145. 二叉树的后序遍
    目录题目链接:144.二叉树的前序遍历-简单题目链接:145.二叉树的后序遍历-简单题目链接:94.二叉树的中序遍历-简单递归三要素:确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归......
  • 530. 二叉搜索树的最小绝对差c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/voidinorder(structTreeNode*root,int*t,int*pre){if(!root)return;inorder(root->left,t,pr......
  • 98. 验证二叉搜索树c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/booljudge(structTreeNode*root,long*pre){if(!root)returntrue;boola=judge(root->left,......
  • 700. 二叉搜索树中的搜索c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*searchBST(structTreeNode*root,intval){if(!root)returnNULL;while(root){......
  • 617. 合并二叉树 c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*mergeTrees(structTreeNode*root1,structTreeNode*root2){if(!root1&&!roo......
  • 106. 从中序与后序遍历序列构造二叉树 c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*buidl_tree(int*inorder,inthead1,intn1,int*postorder,inthead2,intn2){if(n1<......