二叉树的查找
//二叉树的查找(在二叉树中查找值为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日