二叉树删除节点
完成删除结点的操作
规定:①如果删除的结点是叶子结点,则删除该结点
②如果删除的结点是非叶子结点,则删除该子树
思路:
1.考虑如果树是空树root,如果只有一个root结点,则等价将二叉树置空。
2.因为二叉树数单向的,所以判断当前结点的子结点是否需要删除结点,而不能去判断当前结点是不是需要删除的结点。
3.如果当前结点的左子结点不为空,并且左子结点就是要删除的结点,就将this.left = null;并且就返回(结束递归删除)
4.如果当前结点的右子结点不为空,并且右子结点就是要删除的结点,就将this.right = null;并且就返回(结束递归删除)
5.如果第3步和第4步没有删除的结点,那么就需要向左子树进行递归删除
6.如果第5步也没有删除的结点,则应当向右子树进行递归删除
public class BinaryTreeDemo {
public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree();
HeroNode root = new HeroNode(1,"宋江");
HeroNode node1 = new HeroNode(2,"吴用");
HeroNode node2 = new HeroNode(3,"卢俊义");
HeroNode node3 = new HeroNode(4,"林冲");
HeroNode node4 = new HeroNode(5,"关胜");
root.setLeft(node1);
root.setRight(node2);
node2.setRight(node3);
node2.setLeft(node4);
binaryTree.setRoot(root);
System.out.println("结点删除前的二叉树");
binaryTree.preOrder();
binaryTree.delNode(5);
System.out.println("结点删除后的二叉树");
binaryTree.preOrder();
}
}
class BinaryTree{
HeroNode root;
public void setRoot(HeroNode root){
this