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

Java求二叉树根结点到r结点之间的路径

问题描述:求二叉树根结点到r结点之间的路径

Description:
假设二叉树采用二叉链表方式存储,root指向根结点,r所指结点为任一给定的结点。请编程,求出从根结点到结点r之间的路径。
Input
输入有若干种情况,每种情况二行,第一行是一个按顺序存储的二叉树。如果结点处空用半角的‘.’代替。第二行是一个要查找的结点r。
Output
每个案例输出一行,输出从根结点到结点r之间的路径。

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;

    }

}
  • 写回答

1条回答 默认 最新

  • CSDN专家-Time 2021-11-19 17:32
    关注

    你把树存对,然后用深搜 找节点不就能完成需求了吗。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 创建了问题 11月19日

悬赏问题

  • ¥15 MPLS/VPN实验中MPLS的配置问题
  • ¥15 materialstudio氢键计算问题
  • ¥15 已知隐函数其中一个变量的,求另外一个变量
  • ¥15 echarts图表制作
  • ¥15 halcon根据玻璃面板纹路取区域
  • ¥15 HFSS设计小型化180度耦合器
  • ¥15 使用CInternetSession,CHttpFile读取网页文件时有些电脑上会卡住怎么办?
  • ¥15 水下机器人的半物理仿真研究
  • ¥15 微服务假死,一段时间后自动恢复,如何排查处理
  • ¥50 webrtc-streamer TCP rtsp