您的位置:首页 > 编程语言 > Java开发

java 二叉树(七)获取左子树中的最大节点

2016-07-06 17:24 211 查看
使用递归算法



此时要获取A的左子树中的最大值,首先分析最大值一定在左子树中的最右边,即B,这个最大值B也一定没有右孩子,那么我们只需要把A的右孩子的指向指向C即可,涉及到B的双亲节点和B的左孩子。



然后把得到的B节点返回即可。

(上次有错误,条件没覆盖全,这次修改下,测试完全ok!)

//查找一个节点下所有子孙中的最大值,并且删除这个节点,
public Node delFind(Node node){ //传入参数为被删除节点的左孩子Node node
//Node temp=node;
if(node.getRightChild()==null){
return node;
}
if(node.getRightChild().getRightChild()==null){
if(node.getRightChild().getLeftChild()!=null){
/*
* 如果被删除的节点有有左孩子,需要用被删除节点的父节点的右孩子指向被删除结点的左孩子,
* 然后再把被删除节点的左孩子指向设为null,那么需要删除的节点就被删掉了
* 意思就是把B删除,把A指向C
* A
* / \
* D B
* /
* C
*/
Node temp=node.getRightChild();
node.setRightChild(node.getRightChild().getLeftChild());
//node.getRightChild().setLeftChild(null);
temp.setLeftChild(null);
return temp;
}
Node temp=node.getRightChild();
node.setRightChild(null);
return temp;
}

return delFind(node.getRightChild());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息