目录
1. 题目列表
序号 | 题目 | 难度 |
---|---|---|
1 | 226. 翻转二叉树 | 简单 |
2 | 116. 填充每个节点的下一个右侧节点指针 | 中等 |
2. 应用
2.1. Leetcode 226. 翻转二叉树
2.1.1. 题目
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
2.1.2. 解题思路
2.1.2.1. 方法一:前序遍历
我们可以考虑在进入每个节点之前,在前序的位置交换每个节点的左右子树。
2.1.2.2. 方法二:后序遍历
我们也可以考虑在离开每个节点之后,在后序的位置交换每个节点的左右子树。
2.1.3. 代码实现
- 方法一:前序遍历
class Solution {
public TreeNode invertTree(TreeNode root) {
return dfs(root);
}
private TreeNode dfs(TreeNode root) {
if (root == null) {
return null;
}
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
dfs(root.right);
dfs(root.left);
return root;
}
}
- 方法二:后序遍历
class Solution {
public TreeNode invertTree(TreeNode root) {
return dfs(root);
}
private TreeNode dfs(TreeNode root) {
if (root == null) {
return null;
}
TreeNode right = dfs(root.right);
TreeNode left = dfs(root.left);
root.left = right;
root.right = left;
return root;
}
}
2.2. Leetcode 116. 填充每个节点的下一个右侧节点指针
2.2.1. 题目
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node { int val; Node *left; Node *right; Node *next; }
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例 1:
输入:root = [1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。
2.2.2. 解题思路
2.2.2.1. 方法一:广度优先搜索
2.2.2.2. 方法二:深度优先搜索
2.2.3. 代码实现
标签:TreeNode,二叉树,应用,2.2,2.1,root,节点 From: https://www.cnblogs.com/larry1024/p/17991436