解题思路:
注意事项:居然是两次中根遍历,笑掉我的大牙
参考代码:
import java.util.LinkedList;
import java.util.Scanner;
class TreeNode{
public char val;
public TreeNode left;
public TreeNode right;
public TreeNode(char val) {
this.val = val;
}
}
public class Main {
public static LinkedList<Character> characters = new LinkedList<>();
public static LinkedList<Character> firstRoot=new LinkedList<>();
public static LinkedList<Character> midRoot=new LinkedList<>();
public static LinkedList<Character> lastRoot=new LinkedList<>();
public static void main(String[] args) {
//1.读入输入,转成字符数组,存入list里操作方便
//2.实现二叉树创建函数
//3.实现三种遍历方式
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
characters.add(chars[i]);
}
TreeNode tree = createTree();
firstRootTra(tree);
midRootTra(tree);
lastRootTra(tree);
String s1="";
String s2="";
String s3="";
for (int i = 0; i < firstRoot.size(); i++) {
s1=s1+firstRoot.get(i)+" ";
s2=s2+midRoot.get(i)+" ";
s3=s3+lastRoot.get(i)+" ";
}
System.out.println(s1);
System.out.println(s2);
System.out.println(s2);
}
public static TreeNode createTree(){
if(characters.size()==0){
return null;
}
Character first = characters.getFirst();
characters.removeFirst();
if(first==' '){
return null;
}
TreeNode root=new TreeNode(first);//创建根
root.left=createTree();//创建左子树
root.right=createTree();//创建右子树
return root;
}
public static void firstRootTra(TreeNode treeNode){
if(treeNode==null){
return;
}
//对于根节点
firstRoot.add(treeNode.val);
firstRootTra(treeNode.left);
firstRootTra(treeNode.right);
}
public static void midRootTra(TreeNode treeNode){
if(treeNode==null){
return;
}
midRootTra(treeNode.left);
midRoot.add(treeNode.val);
midRootTra(treeNode.right);
}
public static void lastRootTra(TreeNode treeNode){
if(treeNode==null){
return;
}
lastRootTra(treeNode.left);
lastRootTra(treeNode.right);
lastRoot.add(treeNode.val);
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复