M10++ 2021-11-19 17:29 采纳率: 83.3%
浏览 23
已结题

Java数构求二叉树的深度

img


import java.util.*;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner cin = new Scanner(System.in);
        while (cin.hasNext()) {
            String str = cin.next();
            // 根据顺序存储的二叉树创建连式存储的二叉树
            BinaryTree<Character> tree = new BinaryTree<Character>(str);
            

        }

    }


}

class BinaryNode<T> {
    // 数据
    T data;
    // 左孩子
    BinaryNode<T> left;
    // 右孩子
    BinaryNode<T> right;

    public BinaryNode(T data, BinaryNode<T> left, BinaryNode<T> right) {
        super();
        this.data = data;
        this.left = left;
        this.right = right;
    }

    public BinaryNode() {
        super();
    }

    // 根据节点的内容创建节点
    public BinaryNode(T data) {
        this(data, null, null);
    }

    // 判断节点是否为叶子节点
    public boolean isLeaf() {
        return left == null && right == null;
    }

    // 遍历节点
    @Override
    public String toString() {
        return data.toString();
    }

}

class BinaryTree<T> {

    BinaryNode<T> root;

    public BinaryTree(BinaryNode<T> root) {
        super();
        this.root = root;
    }

    // 1 空树
    public BinaryTree() {
        super();
        root = null;
    }

    public BinaryTree(String str) {
        super();
        root = createTree(str, 0);
    }

    // 2 判空
    public boolean isEmpty() {
        return root == null;
    }

    public void levelOrder() {

        this.levelOrder(root);
    }

    // 层次遍历
    public void levelOrder(BinaryNode<T> p) {
        Queue<BinaryNode<T>> q = new LinkedList<BinaryNode<T>>();
        q.add(p);

        while (!q.isEmpty()) {
            BinaryNode<T> t = q.poll();
            System.out.print(t.data.toString());
            if (t.left != null) {
                q.add(t.left);

            }
            if (t.right != null) {
                q.add(t.right);
            }

        }

    }

    //
    public BinaryNode<T> createTree(String str, int i) {

        BinaryNode p = null;

        if (i < str.length() && str.charAt(i) != '.') {
            // 创建根节点
            p = new BinaryNode(str.charAt(i));
            p.left = createTree(str, 2 * i + 1);
            p.right = createTree(str, 2 * i + 2);

        }

        return p;

    }

}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月27日
    • 创建了问题 11月19日

    悬赏问题

    • ¥15 VESTA绘图原子颜色显示异常
    • ¥15 天翼云搭建多ip l2tp
    • ¥30 matlab求解刃位错方程
    • ¥15 python实现CAD识图
    • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
    • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
    • ¥20 单细胞数据注释时报错
    • ¥20 dify工作流分析sql查询结果
    • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
    • ¥15 通过AT指令控制esp8266发送信息