先序遍历二叉树

x33g5p2x  于2022-06-10 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(371)

一 问题描述

输入一颗二叉树,输出其先序遍历的序列。

二 输入和输出

1 输入

第1行为二叉树的节点数 n,后面的 n 行,以每一个字母为节点,后两个字母分别为其左、右孩子。空节点用 * 表示。

2 输出

输出二叉树的先序序列。

三 样例

输入样例
6

abc

bdi

cj*

d**

i**

j**

输出样例

abdicj

四 思路

可用静态存储方式,存储每个节点的左、右孩子,然后按先序遍历顺序输出。

五 代码

package tree;

import java.util.Scanner;

public class P1305 {
    private static int root;
    private static int l[] = new int[100];
    private static int r[] = new int[100];

    // 先序遍历
    static void preorder(int t) {
        if (t != '*' - 'a') {
            System.out.print((char) ('a' + t));
            preorder(l[t]);
            preorder(r[t]);
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            String s = scanner.next();
            if (i == 0) {
                root = s.charAt(0) - 'a';
            }
            l[s.charAt(0) - 'a'] = s.charAt(1) - 'a';
            r[s.charAt(0) - 'a'] = s.charAt(2) - 'a';
        }
        preorder(root);
    }
}

六 测试

相关文章