请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 41|回复: 0

二叉树的增、遍历、取最大(最小)

[复制链接]

17

主题

19

帖子

144

积分

注册会员

Rank: 2

积分
144
发表于 2023-5-25 20:02:34 | 显示全部楼层 |阅读模式
public class TreeManger {
    //根节点
    private Node root;
    //数量
    private int size;

    /**
     * 增加操作
     *
     * @param e
     */
    /**
     * 向二叉树中添加一个元素
     * @param e 要添加的元素
     * @return 添加成功返回 true,否则返回 false
     */
    public boolean add(int e) {
        // 创建新节点
        Node node = new Node(e);
        // 判断根节点是否为空
        if (root == null) {
            // 如果是空树,把新节点作为根节点
            root = node;
            size++;
            return true;
        } else {
            // 当前节点指向根节点
            Node current = root;
            // 父节点初始化为 null
            Node parent;
            // 遍历整棵树
            while (current != null) {
                // 把当前节点赋给父节点
                parent = current;
                // 判断插入值与当前节点值的大小关系
                if (e < current.getDate()) {
                    // 小于当前节点的值,向左子树搜索
                    current = current.getLeftNode();
                    // 如果左子节点为空,插入到这里
                    if (current == null) {
                        // 新节点作为其父节点的左子节点
                        parent.setLeftNode(node);
                        size++;
                        return true;
                    }
                } else {
                    // 大于等于当前节点的值,向右子树搜索
                    current = current.getRightNode();
                    // 如果右子节点为空,插入到这里
                    if (current == null) {
                        // 新节点作为其父节点的右子节点
                        parent.setRightNode(node);
                        size++;
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
     * 返回二叉树中最大元素的值
     * @return 最大元素的值,如果树为空则返回 -1
     */
    public int getMax(){
        // 如果树为空,返回 -1
        if (root==null){
            return -1;
        } else {
            // 右侧节点初始化为根节点
            Node right   = root;
            // 不断向右子树搜索,直到找到最右端的节点
            while (right.getRightNode()!= null){
                right = right.getRightNode();
            }
            // 返回最右端的节点的值
            return right.getDate();
        }
    }


    /**
     * 返回二叉树中最小元素的值
     * @return 最小元素的值,如果树为空则返回 -1
     */
    public int getMin(){
        // 如果树为空,返回 -1
        if (root==null){
            return -1;
        }else {
            // 左侧节点初始化为根节点
            Node left   = root;
            // 不断向左子树搜索,直到找到最左端的节点
            while (left.getLeftNode()!= null){
                left = left.getLeftNode();
            }
            // 返回最左端的节点的值
            return left.getDate();
        }
    }

    /**
     * 递归 中序 遍历
     * @param node
     */
    public void infixOrder(Node node){
        if (node!=null){
            infixOrder(node.getLeftNode());
            System.out.print(node.getDate()+" ");
            infixOrder(node.getRightNode());
        }
     }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2023-6-2 12:53 , Processed in 0.040513 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表