鉴于力扣刷题,在树这一块本地创建树结构太复杂,结合网上资料,自己想偷点懒,再改进一下。
有了如下代码。
package com.programmercarl.util;
import com.programmercarl.tree.TreeNode;
import java.util.Deque;
import java.util.LinkedList;
/**
* @ClassName GenerateTreeNode
* @Descriotion TODO
* @Author nitaotao
* @Date 2022/7/4 12:02
* @Version 1.0
**/
public class GenerateTreeNode {
public static TreeNode generateTreeNode(String treeStr) {
String[] strs = treeStr.substring(1, treeStr.length() - 1).split(",");
Integer[] nums = new Integer[strs.length];
for (int i = 0; i < strs.length; i++) {
if ("null".equals(strs[i])) {
nums[i] = null;
} else {
nums[i] = Integer.parseInt(strs[i]);
}
}
if (nums == null || nums.length == 0) {
return null;
}
int len = nums.length;
int index = 0;
TreeNode head = new TreeNode(nums[index]);
Deque<TreeNode> nodeQueue = new LinkedList<>();
nodeQueue.offer(head);
TreeNode cur;
while (index < len) {
index++;
if (index >= len) {
return head;
}
cur = nodeQueue.poll();
Integer left = nums[index];
if (left != null) {
cur.left = new TreeNode(left);
nodeQueue.offer(cur.left);
}
index++;
if (index >= len) {
return head;
}
Integer right = nums[index];
if (right != null) {
cur.right = new TreeNode(right);
nodeQueue.offer(cur.right);
}
}
return head;
}
}
至于怎么用呢,比如这题
package com.programmercarl.tree;
import com.programmercarl.util.GenerateTreeNode;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
/**
* @ClassName MinDepth
* @Descriotion TODO
* @Author nitaotao
* @Date 2022/7/3 22:32
* @Version 1.0
* 111. 二叉树的最小深度
* https://leetcode.cn/problems/minimum-depth-of-binary-tree/
**/
public class MinDepth {
public static int minDepth(TreeNode root) {
//层序遍历,哪一行不满,即有缺省,则为最短深度
int minDepth = 0;
if (root == null) {
return minDepth;
}
Deque<TreeNode> deque = new ArrayDeque<TreeNode>();
deque.offer(root);
int length = 1;
while (!deque.isEmpty()) {
int size = deque.size();
boolean flag = false;
while (size > 0) {
root = deque.poll();
//出现叶子结点
if (root.left == null && root.right == null) {
flag = true;
}
if (root.left != null) {
deque.offer(root.left);
}
if (root.right != null) {
deque.offer(root.right);
}
size--;
}
length *= 2;
minDepth++;
if (deque.size() != length && flag) {
return minDepth;
}
}
return minDepth;
}
public static void main(String[] args) {
System.out.println(minDepth(GenerateTreeNode.generateTreeNode("[3,9,20,null,null,15,7]")));
}
}
直接调用就是生成的头结点,中括号都不用删,直接 ctrl + c , ctrl + w , ctrl + v
我累了,毁灭吧。