标签:node right TreeNode 删除 BST null root 节点 left
/**
* BST中删除一个节点,并返回新的BST
* @author zhaizhg
*
*/
public class DeleteNumInBST {
public static void main(String[] args) {
TreeNode root = new TreeNode(5);
root.left = new TreeNode(2);
root.right = new TreeNode(6);
root.left.left = new TreeNode(1);
root.right.right = new TreeNode(7);
root.left.right = new TreeNode(4);
root.left.right.left = new TreeNode(3);
TreeNode node = delete(root, 2);
System.out.println(node.left.val);
}
static TreeNode delete(TreeNode node, int num) {
if (node == null) return null;
if (node.val == num) {
// 如果没有左右子节点
if (node.left == null && node.right == null) return null;
// 如果没有左节点
if (node.left == null) return node.right;
// 如果没有右节点
if (node.right == null) return node.left;
// 如果左右节点都有,找到左或右子树的最小节点来替换他的位置
// 再把这个最小节点给移除
TreeNode minNode = getMin(node.right);
node.val = minNode.val;
node.right = delete(node.right, minNode.val);
} else if (node.val > num) {
node.left = delete(node.left, num);
} else if (node.val < num) {
node.right = delete(node.right, num);
}
return node;
}
static TreeNode getMin(TreeNode node) {
while (node.left != null) {
node = node.left;
}
return node;
}
}
标签:node,right,TreeNode,删除,BST,null,root,节点,left 来源: https://blog.csdn.net/qq_36986015/article/details/113701726
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。