二叉树的查找、插入和删除

二叉树的查找
 //二叉树的查找(在二叉树中查找值为val的结点并返回该结点)
    public TreeNode search(TreeNode root, int val) {
    	if(root == null || root.val == val)
    		return root;
    	else if(val< root.val)
    		return search(root.left, val);
    	else 
    		return search(root.right, val);
    }
二叉树的插入
//二叉树的插入(向二叉树中插入一个值)
    public void insert(TreeNode root, int val) {
    	if(val<root.val) {
    		if(root.left == null) {
    			TreeNode node = new TreeNode(val);
    			root.left = node;
    		}else {
    			insert(root.left,val);
    		}
    	}else if(val>root.val){
    		if(root.right == null) {
    			TreeNode node = new TreeNode(val);
    			root.right = node;
    		}else {	
    			insert(root.right,val);
    		}
    	}
    	
    }
二叉树的删除

以下为二叉树的删除规则:
①如果要删除的结点没有子结点,那直接删除它就好;
②如果要删除的结点有一个子结点,那删除它之后,还要将子结点填到被删除结点的位置上;
③如果要删除的结点有两个子结点,则将该结点替换成其后继结点。一个结点的后继结点,就是所有比被删除结点大的子结点中,最大的那个;注意: 如果后继结点带有右子结点,则在后继结点填补被删除结点之后,用此右子结点替代后继结点的双亲结点的左子结点。

//二叉树的删除(删除二叉树中值为val的结点)
    public TreeNode delete(TreeNode root, int val) {
    	if(root==null)
    		return null;
    	else if(val<root.val) {
    		root.left = delete(root.left,val);
    		return root;
    	}else if(val>root.val) {
    		root.right = delete(root.right, val);
    		return root;
    	}else if(val == root.val) {
    		if(root.left == null) {
    			return root.right;
    		}else if(root.right == null) {
    			return root.left;
    		}else {
    			root.right = lift(root.right,root);
    			return root;
    		}
    	}
		return root;
    	
    }
    public TreeNode lift(TreeNode node, TreeNode nodeToDelete) {
    	if(node.left!=null) {
    		node.left = lift(node.left,nodeToDelete);
    		return node;
    	}else {
    		nodeToDelete.val = node.val;
    		return node.right;
    	}
    }

首次编辑于2021年11月7日

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值