Java实现二叉树结点的删除完整代码示例

结点类

public class BinaryTreeNodeDel {
    //结点类
    private BinaryTreeNodeDel leftNode;
    private BinaryTreeNodeDel rightNode;
    public int id;
    public  String name;

    //构造方法,toString, setget方法
    public BinaryTreeNodeDel(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public String toString() {
        return "id: " + id + ", name: " + name;
    }

    public void setLeftNode(BinaryTreeNodeDel node) {
        this.leftNode = node;
    }

    public void setRightNode(BinaryTreeNodeDel node) {
        this.rightNode = node;
    }

    //二叉树结点的删除
    public void delNodeById(int id){
        //根节点的删除交给二叉树类完成
        //1. 如果左子树非空,并且找到了id相同的结点, 删除并返回
        if(this.leftNode != null && this.leftNode.id == id){
            this.leftNode = null;
            return;
        }
        //2. 如果1未得到执行, 那么弱右子树非空, 并且找到了id相同的结点, 删除并返回
        if(this.rightNode != null && this.rightNode.id == id) {
            this.rightNode = null;
            return;
        }
        //3. 如果1,2均为获得执行, 而左子树又非空的话, 递归遍历左子树
        if(this.leftNode != null)
            this.leftNode.delNodeById(id);

        //3. 如果1,2均为获得执行, 并且3也没有找到合适的结点
        // 若右子树又非空的话, 递归遍历右子树
        if(this.rightNode != null)
            this.rightNode.delNodeById(id);
    }

二叉树类

public class BinaryTreeDel {
    //指定根节点
    private BinaryTreeNodeDel root;
    public BinaryTreeDel(BinaryTreeNodeDel node){
        this.root = node;
    }
    //结点删除的方法
    public void nodeDelById(int id){
        
        if( root != null){
            if(root.id == id){
                root = null;
                System.out.println("id = "+id+"的结点已删除");
            }else{
                root.delNodeById(id);
                System.out.println("id = "+id+"的结点已删除");

            }
           
        }else{
            System.out.println("二叉树已经为空, 查找失败");
        }
    }

    public static void main(String[] args) {
        //建立二叉树结点
        BinaryTreeNodeDel node1 = new BinaryTreeNodeDel(1, "宋江");
        BinaryTreeNodeDel node2 = new BinaryTreeNodeDel(2, "吴用");
        BinaryTreeNodeDel node3 = new BinaryTreeNodeDel(3, "卢俊义");
        BinaryTreeNodeDel node4 = new BinaryTreeNodeDel(4, "公孙胜");
        BinaryTreeNodeDel node5 = new BinaryTreeNodeDel(5, "关俊");
        //建立二叉树
        BinaryTreeDel tree = new BinaryTreeDel(node1);
        //结点放到二叉树中
        node1.setLeftNode(node2);
        node1.setRightNode(node3);
        node3.setLeftNode(node4);
        node3.setRightNode(node5);

        //删除结点
        tree.nodeDelById(5);
    }
}
posted @ 2022-05-26 20:31  青松城  阅读(56)  评论(0编辑  收藏  举报