二叉树学习(二)删除节点之单个叶子节点

笔记示意图

第一种删除叶子节点()

思路:
1.找到要删除的叶子
2.找到叶子的父节点parent
3.判断叶子是parent的左子节点还是右子节点4根据前面的情况对应删除
左子节点 parent.left=null
右子节点 parent.lright=null

第二种情况:
1.找到要删除的节点targetnode
2.找到叶子的父节点parent
3.确定targetnode的子节点是左子节点还是右子节点
(4)确定target是parent的左子节点还是右子节点
(5)如果targetnode有左子节点
5.1如果targetnode是parents的左子节点
Parent,left=targetnode.left
5.2如果targetnode是parents的右子节点
Parent.right=targetnode.left
(6)如果targetnode有右子节点
如果targetnode是parent的左子节点
Parent,left=targetnode.right
如果targetnode是parent的右子节点
Parent,right=targetnode.right
情况三 删除有两颗子树的节点

思路
(1)找到要删除的节点targetnode
2.找到叶子的父节点parent
(3)从targetnode的右子树找到最小的节点
(4)用一个临时变量,将最小节点的值保存在tamp中
(5)删除该最小节点
(6)targetnode.value=temp
本次新增了search和searchparent和delNode方法
注意:只实现了第一种情况的删除

public class BST {
   
    public static void main(String[] args) {
   
           int[]arr={
   7,3,10,12,5,1,9,2};
           BinarySortTree binarySortTree=new BinarySortTree();
        for (int i = 0; i < arr.length; i++) {
   
            binarySortTree.add(new Node(arr[i]));
        }
        System.out.println("中序遍历");
        binarySortTree.infixOrder();
        //删除节点
        System.out.println("删除后");
        binarySortTree.delNode(5);
        binarySortTree.infixOrder();
    }
}
class  BinarySortTree{
   
    private Node root
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以采用递归的方式来遍历整个二叉树,找到最小值的节点。 具体实现如下: ```C++ #include <iostream> using namespace std; // 二叉树节点的结构体 struct TreeNode { char val; TreeNode* left; TreeNode* right; TreeNode(char x) : val(x), left(NULL), right(NULL) {} }; // 求二叉树中最小值的节点值 char findMin(TreeNode* root) { if (root == NULL) { // 如果当前节点为空,返回最大字符 return 'z' + 1; } // 递归地查找左子树和右子树中的最小值 char leftMin = findMin(root->left); char rightMin = findMin(root->right); // 返回左右子树最小值和当前节点值三者中的最小值 return min(root->val, min(leftMin, rightMin)); } int main() { // 构造二叉树 TreeNode* root = new TreeNode('a'); root->left = new TreeNode('c'); root->right = new TreeNode('b'); root->right->left = new TreeNode('d'); // 求最小值 char minVal = findMin(root); cout << "The minimum value in the binary tree is " << minVal << endl; return 0; } ``` 在上面的代码中,我们定义了一个函数 `findMin`,它采用递归的方式遍历二叉树,找到最小值的节点。如果当前节点为空,我们返回一个比所有字符都大的字符,这样在比较的时候就可以将它排除在外。然后,我们递归地查找左子树和右子树中的最小值,最后返回左右子树最小值和当前节点值三者中的最小值。在主函数中,我们构造了一个二叉树,然后调用 `findMin` 函数求最小值,并输出结果。 上面的代码中,我们使用了 STL 中的 `min` 函数来比较三者的最小值,这是 C++ 提供的一个非常方便的工具,可以大大简化代码的编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值