二叉树的创建有两种方式,一种是递归方式创建,另外一种是非递归方式创建,其中后者比较难,这里使用递归方式创建二叉树。
要求:使用前序序列的方式输入若干个字符,如"
abc,,de,g,,f,,,
",其中,','表示是空节点,根据该字符序列输出前序遍历字符串,中续遍历字符串,后序遍历字符串。
分析问题,如果使用C语言比较方便实现,使用java稍微麻烦一点,需要手动结束输入,这里使用了标识变量flag判断输入的结束。
package com.kdyzm.bittree;
class Node {
char data;
Node lchild;
Node rchid;
}
public class Main {
private static boolean flag = false;
public static void main(String[] args) throws Exception {
Node root = createPreBitTree();
preOderTraverse(root);
System.out.println();
inOrderTraverse(root);
System.out.println();
endOrderTraverse(root);
}
private static void preOderTraverse(Node root) {
if (root != null) {
System.out.print(root.data);
preOderTraverse(root.lchild);
preOderTraverse(root.rchid);
}
}
private static void endOrderTraverse(Node root) {
if (root != null) {
endOrderTraverse(root.lchild);
endOrderTraverse(root.rchid);
System.out.print(root.data);
}
}
private static void inOrderTraverse(Node node) {
if (node != null) {
inOrderTraverse(node.lchild);
System.out.print(node.data);
inOrderTraverse(node.rchid);
}
}
private static Node createPreBitTree() throws Exception {
if (flag == true) {
return null;
}
Node node = null;
char ch = (char) System.in.read();
if (ch == '\n') {
flag = true;
return null;
}
if (ch == ',') {
node = null;
} else {
node = new Node();
node.data = ch;
node.lchild = createPreBitTree();
node.rchid = createPreBitTree();
}
return node;
}
}
测试用例:
输入
abc,,de,g,,f,,,
输出
abcdegf
cbegdfa
cgefdba
abc,,de,g,,f,,,
输出
abcdegf
cbegdfa
cgefdba
输出分别是前序遍历、中序遍历、后序遍历的结果。