解题思路:

注意事项:居然是两次中根遍历,笑掉我的大牙

参考代码:

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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论