Delete Node in a BST
Thoughts
Code
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private TreeNode[] leftMost(TreeNode node, TreeNode par) {
if (node == null) {
return null;
}
if (node.left != null) {
return leftMost(node.left, node);
}
TreeNode[] res = new TreeNode[2];
res[0] = node;
res[1] = par;
return res;
}
private TreeNode[] findNode(TreeNode node, int key, TreeNode par) {
if (node == null) {
return null;
}
if (node.val > key) {
return findNode(node.left, key, node);
} else if (node.val < key) {
return findNode(node.right, key, node);
} else {
TreeNode[] res = new TreeNode[2];
res[0] = node;
res[1] = par;
return res;
}
}
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) {
return null;
}
if (root.val == key) {
if (root.left == null) {
return root.right;
} else if (root.right == null) {
return root.left;
} else {
TreeNode[] result = leftMost(root.right, null);
if (result[1] != null) {
result[1].left = result[0].right;
}
result[0].left = root.left;
if (root.right != result[0]) result[0].right = root.right;
return result[0];
}
}
TreeNode[] res = findNode(root, key, null);
if (res == null) {
return root;
}
TreeNode target = res[0];
TreeNode par = res[1];
if (target == par.left) {
if (target.left == null) {
par.left = target.right;
} else if (target.right == null) {
par.left = target.left;
} else {
TreeNode[] result = leftMost(target.right, null);
System.out.println(result[0].val );
par.left = result[0];
if (result[1] != null) {
result[1].left = result[0].right;
}
result[0].left = target.left;
if (target.right != result[0]) result[0].right = target.right;
}
} else {
if (target.left == null) {
par.right = target.right;
} else if (target.right == null) {
par.right = target.left;
} else {
TreeNode[] result = leftMost(target.right, null);
par.right = result[0];
if (result[1] != null) {
result[1].left = result[0].right;
}
result[0].left = target.left;
if (target.right != result[0]) result[0].right = target.right;
}
}
return root;
}
}Analysis
Ver.2
Ver 3
Last updated