【LeetCode笔记】树的专项练习
文章目录
- 树的遍历
- 先序遍历(单栈)
- 例题:
- 中序遍历(单栈)
- 例题:
- 后续遍历(双栈)
- 例题:
- 层次遍历(队列)
- 例题:
- 二叉树的最大深度
- 例题:
- 判断树的类型
- 是否搜索二叉树
- 例题:
- 是否完全二叉树
- 例图:
- 是否满二叉树
- 是否平衡二叉树
- 例题:[110. 平衡二叉树 - 力扣(LeetCode) (leetcode-cn.com)](https://leetcode-cn.com/problems/balanced-binary-tree/)
- 节点的公共祖先
- 例题:
推荐视频:
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解_哔哩哔哩_bilibili
树的遍历
递归序:看视频吧
- 先序遍历 – 头左右
- 先序遍历的变体 – 头右左 (跟后续遍历 相反 即 使用双栈可以实现后序遍历 )
- 中序遍历 – 左头右
- 后续遍历 – 左右头
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7nXaCHly-1646635857542)(C:\Users\dancerHoan\AppData\Roaming\Typora\typora-user-images\image-20220301100725128.png)]
class Solution {public void preOrder(TreeNode root){if(root==null){return;}//先序遍历 在这里处理节点 System.out.println(root.val)preOrder(root.left,l);//中序遍历 在这里处理节点 System.out.println(root.val)preOrder(root.right,l);//后序遍历 在这里处理节点 System.out.println(root.val)}
}
先序遍历(单栈)
实现步骤:
Stack<Node> s = new Stack<>();1.从栈中弹出一个节点 Node n = s.pop();
2.打印(处理) 该节点
3.将孩子节点 从右至左 依次压栈
List<Node> children = n.children;
for(int i=children.size()-1;i>=0;i--){Node node = children.get(i);s.push(node);
}
4.循环 while(!s.isEmpty())
例题:
589. N 叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)
class Solution {public List<Integer> preorder(Node root) {Stack<Node> s = new Stack<>();List<Integer> l = new ArrayList<>();if (root == null) {return l;}s.push(root);while (!s.isEmpty()) {Node n = s.pop();l.add(n.val);List<Node> children = n.children;for(int i=children.size()-1;i>=0;i--){Node node = children.get(i);s.push(node);}// 倒叙遍历,当然这个方法很蠢 可以先将链表反转如下// Collections.reverse(node.children);// for (Node item : node.children) {// stack.add(item);// }}return l;}
}
144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> l = new ArrayList<>();Stack<TreeNode> s = new Stack<>();if(root==null){return l;}s.push(root);while(!s.isEmpty()){TreeNode n = s.pop();l.add(n.val);if(n.right !=null){s.push(n.right);}if(n.left != null){s.push(n.left);}}return l;}
}
中序遍历(单栈)
中序遍历 – 左头右
整棵树左边界进栈,依次弹出的过程中打印,对弹出节点的右树重复。
打印顺序是 左头右
- 将左节点循环入栈
s.push(root); root = root.left;
- 若左节点不存在 则说明 上一次压栈的节点为 头节点
- 将头节点 出栈后 指针指向其右节点
root = root.right;
Tips:
- 每次出栈的 肯定是头节点
- 先入左
【LeetCode笔记】树的专项练习相关推荐
- Leetcode 笔记 116 - Populating Next Right Pointers in Each Node
题目链接:Populating Next Right Pointers in Each Node | LeetCode OJ Given a binary tree struct TreeLinkNo ...
- LeetCode—笔记—51、N皇后——递归回溯,个人思路,简单易懂
LeetCode-笔记-51.N皇后--递归回溯,个人思路,简单易懂 51. N 皇后 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...
- 清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示
清华大学邓俊辉-数据结构MOOC笔记-树的概念及逻辑表示 有关概念: 与图论略有不同,数据结构中的树:1.需要为每一颗树指定一个特殊的顶点,作为"根"(root),对应rooted ...
- LeetCode笔记:Biweekly Contest 56(补发)
LeetCode笔记:Biweekly Contest 56 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
- LeetCode笔记:原地修改数组
LeetCode笔记:原地修改数组 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...
- LeetCode笔记:Weekly Contest 280
LeetCode笔记:Weekly Contest 280 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4 ...
- LeetCode笔记:Biweekly Contest 38 比赛记录
LeetCode笔记:Biweekly Contest 38 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 ...
- LeetCode笔记:Biweekly Contest 83
LeetCode笔记:Biweekly Contest 83 0. 小结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. ...
- LeetCode笔记:Biweekly Contest 55(补发)
LeetCode笔记:Biweekly Contest 55 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
- LeetCode笔记:Biweekly Contest 68
LeetCode笔记:Biweekly Contest 68 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
最新文章
- c# 串口最简单接收十六进制
- 计算机与数学文化论文参考文献,数学文化与人类文明论文.doc
- oracle未找到远程连接,Oracle ORA-02019:未找到远程数据库的连接说明 | 学步园
- Socket网络编程--小小网盘程序(1)
- 前端学习(2963):跨域问题
- LeetCode 754. 到达终点数字(数学推理)
- IIS日志-网站运维的好帮手
- Citrix基础端口了解
- 主题:web.config中AppSettings和ConnectionStrings的区别
- Java项目——Everything 开发思路
- 视频监控安防平台-国标35114(GB35114)A级检测内容
- 适配ofd签章SES_Signature
- python数据清洗入门教程(完整版)
- Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String
- 苹果手机app应用显示未受信任打不开怎么办
- 【进阶】数位DP详解
- vue cli3 配置sass全局变量设置不生效,sass混合器文件全局引入
- 海龟交易法则11_历史测试的谎言
- 基于RTU的水情水文自动化监测系统
- 如何将视频分割成几部分 视频剪切软件哪个好
热门文章
- Leetcode 笔记 116 - Populating Next Right Pointers in Each Node