现在来讨论链表构建的二叉树递归形式
图和上一篇的一样,代码如下,就是输入需要说明一下。
package com.rjy.repo.zju.datastrueture.chapter03;
import java.util.Scanner;
/**
* 构建链式的二叉树,需要递归创建!
*
* 我们把每个节点的数据定义位一个字符
* */
class BinaryTree {
// 每个节点的值,包括左右指针,数据区
private BinaryTree left, right;
private char data;
// 创建二叉树,前序的方式创建
public BinaryTree creat(String des) {
System.out.println(des+":");
Scanner sc = new Scanner(System.in);
String str = sc.next();
if(str.charAt(0) < 'a') return null;
// 创建节点
BinaryTree node = new BinaryTree();
// 给每个节点赋值
char data = str.charAt(0);
node.data = data;
node.left = creat(data + " left");
node.right = creat(data + " right");
return node;
}
// 二叉树前序遍历
public void preOrder(BinaryTree root) {
if(root != null) {
System.out.println(root.data);
preOrder(root.left);
preOrder(root.right);
}
}
// 二叉树中序遍历
public void midOrder(BinaryTree root) {
if(root != null) {
midOrder(root.left);
System.out.println(root.data);
midOrder(root.right);
}
}
// 二叉树后序遍历
public void lastOrder(BinaryTree root) {
if(root != null) {
lastOrder(root.left);
lastOrder(root.right);
System.out.println(root.data);
}
}
}
public class BinaryTreeDemo03 {
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
BinaryTree root = bt.creat("root");
System.out.println("先序遍历:");
bt.preOrder(root);
System.out.println("中序遍历:");
bt.midOrder(root);
System.out.println("后续遍历 ");
bt.lastOrder(root);
}
}
输入:
root:
a
a left:
b
b left:
1
b right:
1
a right:
c
c left:
d
d left:
1
d right:
1
c right:
e
e left:
f
f left:
1
f right:
1
e right:
1
先序遍历:
a
b
c
d
e
f
中序遍历:
b
a
d
c
f
e
后续遍历
b
d
f
e
c
a