1.二叉树的构建及遍历
题目详述
题目链接: 二叉树的遍历
题目详述:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
例如先序遍历字符串: ABC##DE#G##F###
其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
程序测试
import java.util.*;
public class BuildTree {
private static class Node {
private char val;
private Node left = null;
private Node right = null;
private Node(char val) {
this.val = val;
}
}
private static class RV {
private Node root;
private int used;
private RV(Node root, int used) {
this.root = root;
this.used = used;
}
}
private static RV buildTree(char[] preorder) {
if (preorder.length == 0) {
return new RV(null, 0);
}
if (preorder[0] == '#') {
return new RV(null, 1);
}
Node root = new Node(preorder[0]);
RV left = buildTree(Arrays.copyOfRange(preorder, 1, preorder.length));
RV right = buildTree(Arrays.copyOfRange(preorder, 1 + left.used, preorder.length));
root.left = left.root;
root.right = right.root;
return new RV(root, 1 + left.used + right.used);
}
private static void inorderTraversal(Node root) { //中序遍历
if (root != null) {
inorderTraversal(root.left);
System.out.print(root.val + " "); //用print不换行
inorderTraversal(root.right);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine(); //用String来接收 public String nextLine()
//可以实现一行字符输入
char[] charArray = line.toCharArray();
//将此字符串转换为新的字符数组 public char[] toCharArray()
RV rv = buildTree(charArray);
inorderTraversal(rv.root);
}
}
运行结果:
2.根据二叉树创建字符串
题目详述
题目链接:根据二叉树创建字符串
程序测试
public class Solution {
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
// 左右都为空
// 左不为空,右为空
// 左为空,右不为空,不能省略
public static String _tree2str(TreeNode t) {
String s = "";
if (t != null) {
s += "(";
s += t.val;
if (t.left == null && t.right == null) {
} else if (t.left == null && t.right != null) {
s += "()";
s += _tree2str(t.right);
} else if (t.left != null && t.right == null) {
s += _tree2str(t.left);
} else {
s += _tree2str(t.left);
s += _tree2str(t.right);
}
s += ")";
}
return s;
}
public static String tree2str(TreeNode t) {
if (t == null) {
return "";
}
String s = _tree2str(t);
return s.substring(1, s.length() - 1);
}
}