栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

51nod 1591 二叉树先序遍历 java题解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51nod 1591 二叉树先序遍历 java题解

题目描述:
输入一个整数n(n <= 100000),表示二叉树中节点个数,编号为1~n。约定1号节点为二叉树的根节点。然后输入n行,每行包括两个整数,第i行表示编号为i的节点的左子节点和右子节点的编号。如果某个节点没有左子节点,那么对应输行的第一个整数为0;如果某个节点没有右子节点,那么对应行的第二个整数为0。
先序遍历输出此二叉树每个节点的编号,每行输出一个编号。

先序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、前序遍历、前序周游,可记做根左右。前序遍历首先访问根节点然后遍历左子树,最后遍历右子树。

输入
第一行:一个整数n
接下来n行,每行有两个整数
输出
输出n行,每行一个整数,表示节点编号。
输入样例
5
2 5
3 4
0 0
0 0
0 0
输出样例
1
2
3
4
5

AC代码:

import java.util.Scanner;
public class code01 {
    //定义节点
    public static class heronode{
        //定义编号
        private int no;
        //定义左边的编号
        private heronode left;
        //定义右边的编号
        private heronode right;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        //定义节点数组
        heronode[] hero = new heronode[1000010];
        //把每一个都设为编号
        for (int i = 0; i <= n; i++) {
            hero[i]=new heronode();
            //对应几号,就设置几号
            hero[i].no=i;
        }
        //输入i序号的左右子树对应的两个编号
        for (int i = 1; i <= n; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            //对应左边的编号
            hero[i].left=hero[a];
            //对应右边的编号
            hero[i].right=hero[b];
        }
        //从1号开始先序遍历
        DLR(hero[1]);
    }
    //递归形式的先序遍历
    private static void DLR(heronode h) {
        if (h.no!=0) {
            //输出根
            System.out.println(h.no);
            //输出左子树
            DLR(h.left);
            //输出右子树
            DLR(h.right);
        }
    }
}
新创建一个公众号 Rockey小何同学 想相互交流的同学可以关注一下哈! 感谢支持!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/712013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号