注意选取何种建树方法取决输入形式
package com.example.javalearn;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
/**
* @Date 2024/7/16 16:20
* @Version 1.0
*/
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class LK_124_tree {
public static void printTreeDFS(TreeNode root){
if(root == null){
return;
}
System.out.print(root.val+" ");
printTreeDFS(root.left);
printTreeDFS(root.right);
}
public static TreeNode buildTreebyBFS(String[] parts) {
if (parts.length == 0 || parts[0].equals("null")) {
return null;
}
Queue<TreeNode> queue = new LinkedList<>();
TreeNode root = new TreeNode(Integer.parseInt(parts[0]));
queue.offer(root);
int index = 1;
while (!queue.isEmpty() && index < parts.length) {
TreeNode node = queue.poll();
if (!parts[index].equals("null")) {
node.left = new TreeNode(Integer.parseInt(parts[index]));
queue.offer(node.left);
}else{
node.left = null;
}
index++;
if (index < parts.length && !parts[index].equals("null")) {
node.right = new TreeNode(Integer.parseInt(parts[index]));
queue.offer(node.right);
}else {
node.right = null;
}
index++;
}
return root;
}
public static TreeNode bulidTreeDFS(int i, String[] traversal){
if(i >= traversal.length || traversal[i].equals("null")){
return null;
}
TreeNode newNode = new TreeNode(Integer.parseInt(traversal[i]));
newNode.left = bulidTreeDFS(2*i+1,traversal);
newNode.right = bulidTreeDFS(2*i+2,traversal);
return newNode;
}
public static TreeNode buildTreebyBFS1(String[] traversal) {
if (traversal.length == 0) {
return null;
}
TreeNode root = null;
Queue<TreeNode> queue = new LinkedList<>();
for(int i = 0; i < traversal.length; i++){
if(i == 0){
root = new TreeNode(Integer.parseInt(traversal[0]));
queue.add(root);
continue;
}
TreeNode current = queue.peek();
if(traversal[i].equals("null")){
if(i % 2 == 1)
current.left = null;
else{
current.right = null;
queue.poll();
}
}
else{
TreeNode p = new TreeNode(Integer.parseInt(traversal[i]));
if(i % 2 == 1){
current.left = p;
}else{
current.right = p;
queue.poll();
}
queue.add(p);
}
}
return root;
}
public static void main(String[] args) {
//[5,4,8,11,null,13,4,7,2,null,null,5,1]
String input = "[1,2,3,null,-1,4,null,null,null,null,null,1,5]";
input = input.substring(1, input.length() - 1); // 去掉方括号
String[] parts = input.split(",");
// 使用层次遍历,输入时null下面不需要null
// TreeNode root = buildTreebyBFS(parts);
//使用深度遍历由于要使用索引,所以输入时要注意!最后一个数前的null都要有占位符
TreeNode root = bulidTreeDFS(0,parts);
printTreeDFS(root);
}
上述代码可以直接运行,举个例子说明输入
采用深搜时:上述输入[5,4,8,11,null,null,13,4,7,2,null,null,null,null,5,1]
采用层次时:上述输入[5,4,8,11,null,13,4,7,2,null,null,5,1]