前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java-二叉树-插入、删除、遍历

Java-二叉树-插入、删除、遍历

作者头像
leehao
发布2025-02-11 12:56:02
发布2025-02-11 12:56:02
7900
代码可运行
举报
文章被收录于专栏:leehaoleehao
运行总次数:0
代码可运行

二叉树的具体特性和细节知识点,自行百度,直接上代码。

节点:节点内容、左子孩子、右子孩子、父亲

代码语言:javascript
代码运行次数:0
复制
class Node {
    private int data;
    private Node leftChild;
    private Node rightChild;
    private Node parent;

    public Node getParent() {
        return parent;
    }

    public void setParent(Node parent) {
        this.parent = parent;
    }

    public Node(int data, Node leftChild, Node rightChild, Node parent) {
        this.data = data;
        this.leftChild = leftChild;
        this.rightChild = rightChild;
        this.parent = parent;

    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getLeftChild() {
        return leftChild;
    }

    public void setLeftChild(Node leftChild) {
        this.leftChild = leftChild;
    }

    public Node getRightChild() {
        return rightChild;
    }

    public void setRightChild(Node rightChild) {
        this.rightChild = rightChild;
    }

}

二叉树构造和操作:

代码语言:javascript
代码运行次数:0
复制
public class BinaryTree {
    private Node root;//根节点
    //插入节点
    public void insertNode(Node root, Node node) {

        Node current = root;
        while (true) {
            if (node.getData() < current.getData()) {
                if (current.getLeftChild() == null) {
                    node.setParent(current);
                    current.setLeftChild(node);
                    break;
                } else {
                    current = current.getLeftChild();
                }
            } else {
                if (current.getRightChild() == null) {
                    node.setParent(current);
                    current.setRightChild(node);
                    break;
                } else {
                    current = current.getRightChild();
                }

            }
        }
    }
    //删除节点
    public void deleteNode(Node node) {
        if (node.equals(root)) {
            root = null;
        } else if (node.getParent() != null) {
            if (node == node.getParent().getLeftChild()) {
                node.getParent().setLeftChild(null);
            } else {
                node.getParent().setRightChild(null);

            }
        }
    }

    //获取某节点的高度
    public int geHeight(Node node) {
        if (node == null) {
            return 0;
        } else {
            int leftHeight = geHeight(node.getLeftChild());
            int rightHeight = geHeight(node.getRightChild());
            int max = Math.max(leftHeight, rightHeight);
            return max + 1;
        }
    }

    //获取某节点的子节点个数
    public int getChildNodes(Node node) {
        if (node == null) {
            return 0;
        } else {
            int leftNodes = getChildNodes(node.getLeftChild());
            int rightNodes = getChildNodes(node.getRightChild());
            return leftNodes + rightNodes + 1;
        }
    }

    //先序遍历树
    public void PreOrder(Node root) {
        if (root == null)
            return;
        System.out.print(root.getData() + " ");
        PreOrder(root.getLeftChild());
        PreOrder(root.getRightChild());
    }

    //中序
    public void MidOrder(Node root) {
        if (root == null) return;
        MidOrder(root.getLeftChild());
        System.out.print(root.getData() + " ");
        MidOrder(root.getRightChild());
    }

    //后序
    public void LastOrder(Node root) {
        if (root == null) return;
        LastOrder(root.getLeftChild());
        LastOrder(root.getRightChild());
        System.out.print(root.getData() + " ");

    }

    public BinaryTree() {

    }

    public BinaryTree(Node root) {
        this.root = root;
    }

    public Node getRoot() {
        return root;
    }

    public void setRoot(Node root) {
        this.root = root;
    }

}

测试:

代码语言:javascript
代码运行次数:0
复制
public class Main {
    public static void main(String[] args) {
        BinaryTree bt = new BinaryTree(new Node(1, null, null, null));
        int a[] = {5, 3, 2, 7, 4, 9, 8};
        for (int i = 0; i < 7; i++) {
            bt.insertNode(bt.getRoot(), new Node(a[i], null, null, null));
        }
//        System.out.println(bt.geHeight(root));//高度
//        bt.PreOrder(root);
//        System.out.println();
//        bt.MidOrder(root);
//        System.out.println();
//        bt.LastOrder(root);
//        System.out.println();
//        bt.deleteNode(bt.getRoot());
//        bt.PreOrder(bt.getRoot());
 //       System.out.println(bt.getChildNodes(bt.getRoot()));//子节点数

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档