本文正在参加「Java主题月 - Java 刷题打卡」,详情查看<活动链接>
【Java 刷题打卡】 刷题比玩游戏好多了,成就感越来越强,每天坚持刷几道题,每天锻炼30分钟,等8块腹肌,等大厂offer.
😄
那就干吧! 这个专栏都是刷的题目都是关于二叉树的,我会由浅入深、循序渐进,刷题就是这样需要连续不断的记忆--艾宾浩斯记忆法2121112。二叉树的内容不多,但是都是每个程序员必备的,对了解红黑树、B+树、LSM树都非常有帮助等等
WAL+LSM-tree实现的leveldb和rocksdb
B+ 树的mysql
(HBASE) - LSM-tree的架构把random write转成sequential write,多层的compaction和lookup,存在写放大和读放大
TokuDB索引结构--Fractal Tree
还有更多,值得咱们发掘。
- 二叉树之中序遍历-迭代、递归
- 二叉树之前序遍历-迭代、递归
- 二叉树之后序遍历-迭代、递归
- 二叉树的层序遍历-迭代、递归
- 二叉树的最大深度-迭代、递归
- 二叉树之对称二叉树-迭代、递归
- 二叉树之路径总和-迭代、递归
- 从中序与后序遍历序列构造二叉树-迭代、递归
- 二叉树的序列化与反序列化-迭代、递归
- 验证二叉搜索树-迭代、递归
- 二叉搜索树中的搜索-迭代、递归
- 二叉搜索树中的插入操作-迭代、递归
- 删除二叉搜索树中的节点-迭代、递归
leecode 589. N 叉树的前序遍历
给定一个 N 叉树,返回其节点值的 前序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
进阶:
递归法很简单,你可以使用迭代法完成此题吗?
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]
提示:
N 叉树的高度小于或等于 1000
节点总数在范围 [0, 10^4] 内
参考代码
定义一颗树
class TreeNode {
int val; // 头结点
TreeNode left; // 左子树
TreeNode right; // 右子树
TreeNode(int x) {
val = x;
}
}
// 测试方法
public static void main(String[] args) {
TreeNode treeNode = new TreeNode(1);
treeNode.left = new TreeNode(2);
treeNode.right = new TreeNode(3);
System.out.println("xxxx结果 = " + preorderTraversal(treeNode));
}
每组子节点由空值 null 分隔
首先的明白题的意思,每组子节点代表,有根,有左节点或者右节点,现在去看示例 2应该就没有问题了吧
java语言版
之前说二叉树的前序遍历时用的栈,同样,在这里也用栈,思路也完全一样。
栈是先进后出。
前序遍历时根、左、右
很明显,先把根怼进栈,有左节点就入栈,直接没有左节点。
因为先进后出,最后加入的节点先出来。
右边也是同理。
JAVA
// 迭代
class Solution {
public List<Integer> preorder(Node root){
List<Integer> list = new ArrayList<>();
Deque<Node> stack = new LinkedList<>();
stack.push(root);
if(root == null) return list;
while(!stack.isEmpty()){
//当前栈顶节点出栈
Node node = stack.pop();
//将值加入列表
list.add(node.val);
int size = node.children.size();
//将当前节点的孩子们从右到左入栈
for(int i = size - 1; i >= 0; i--){
stack.push(node.children.get(i));
}
}
return list;
}
}
// 递归
class Solution {
public List<Integer> preorder(Node root){
List<Integer> list = new ArrayList<>();
helper(root, list);
return list;
}
public void helper(Node root, List<Integer> list){
if(root == null) return;
list.add(root.val);
for(Node child: root.children){
helper(child, list);
}
}
}
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️