Java 版二叉树实现
package *****controller;
import cn.hutool.json.JSONUtil;
import com.bxlsj.star.web.MyBeanDefinitionRegistryPostProcessor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
public class BinaryTree {
public static void main(String[] args) {
TreeNode root = new TreeNode(8);
root.left = new TreeNode(5);
root.left.left = new TreeNode(9);
root.left.right = new TreeNode(7);
root.left.right.left = new TreeNode(1);
root.left.right.right = new TreeNode(12);
root.left.right.right.left = new TreeNode(2);
root.right = new TreeNode(4);
root.right.right = new TreeNode(11);
root.right.right.left = new TreeNode(3);
// 期望输出: 1
System.out.println(kthSmallest(root, 1));
}
public static int kthSmallest(TreeNode root, int k) {
// 如果二叉树为空,说明没有第K小的节点,直接返回空
if (root == null) {
return -1;
}
List<Integer> values = new ArrayList<>();
// 中序遍历得到二叉搜索树的所有节点,是按顺序的
//inOrder(root, values);
//前序遍历
//preOrder(root, values);
//后续遍历
afterOrder(root, values);
System.out.println(JSONUtil.toJsonStr(values));
// 如果k大于二叉树的节点数,说明不存在第K小的节点,直接返回空
if (k > values.size()) {
return -1;
}
// 返回第K小的节点
return values.get(k - 1);
}
/**
* 二叉树后续遍历 左 右 根
*
* @param root
* @param values
*/
private static void afterOrder(TreeNode root, List<Integer> values) {
if (root.left != null) {
afterOrder(root.left, values);
}
if (root.right != null) {
afterOrder(root.right, values);
}
values.add(root.val);
}
/**
* 二叉树前序遍历 根 左 右
*
* @param root
* @param values
*/
private static void preOrder(TreeNode root, List<Integer> values) {
//如果根不为空则保存
if (root != null) {
values.add(root.val);
}
//判断左子树是否为空
if (root.left != null) {
preOrder(root.left, values);
}
//判断右子树是否为空
if (root.right != null) {
preOrder(root.right, values);
}
}
/**
* 二叉树的中序遍历 左 根 右
*
* @param root
* @param values
*/
private static void inOrder(TreeNode root, List<Integer> values) {
if (root.left != null) {
inOrder(root.left, values);
}
values.add(root.val);
System.out.println(root.val);
if (root.right != null) {
inOrder(root.right, values);
}
}
@Data
public static class TreeNode {
public TreeNode(int val) {
this.val = val;
}
private int val;
private TreeNode left;
private TreeNode right;
}
}
Life is so short,do something to make yourself happy, such as coding.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义