前言
代码随想录算法训练营day14
一、Leetcode #### 144. 二叉树的前序遍历
1.题目
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3] 输出:[1,2,3]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
示例 4:
输入:root = [1,2] 输出:[1,2]
示例 5:
输入:root = [1,null,2] 输出:[1,2]
提示:
1. 树中节点数目在范围 [0, 100] 内 2. -100 <= Node.val <= 100
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/binary-tree-preorder-traversal
2.解题思路
方法一:递归
首先我们需要了解什么是二叉树的前序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。
定义 preorder(root) 表示当前遍历到 root 节点的答案。按照定义,我们只要首先将 root 节点的值加入答案,然后递归调用 preorder(root.left) 来遍历 root 节点的左子树,最后递归调用 preorder(root.right) 来遍历 root 节点的右子树即可,递归终止的条件为碰到空节点。
3.代码实现
```java class Solution { public List preorderTraversal(TreeNode root) { List res = new ArrayList (); preorder(root, res); return res; }
1. public void preorder(TreeNode root, List<Integer> res) { 2. if (root == null) { 3. return; 4. } 5. res.add(root.val); 6. preorder(root.left, res); 7. preorder(root.right, res); 8. }
}
```
二、Leetcode 145. 二叉树的后序遍历
1.题目
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[3,2,1]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
提示:
1. 树中节点的数目在范围 [0, 100] 内 2. -100 <= Node.val <= 100
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/binary-tree-postorder-traversal
2.解题思路
方法一:递归
首先我们需要了解什么是二叉树的后序遍历:按照访问左子树——右子树——根节点的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。
定义 postorder(root) 表示当前遍历到 root 节点的答案。按照定义,我们只要递归调用 postorder(root->left) 来遍历 root 节点的左子树,然后递归调用 postorder(root->right) 来遍历 root 节点的右子树,最后将 root 节点的值加入答案即可,递归终止的条件为碰到空节点。
3.代码实现
```java class Solution { public List postorderTraversal(TreeNode root) { List res = new ArrayList (); postorder(root, res); return res; }
1. public void postorder(TreeNode root, List<Integer> res) { 2. if (root == null) { 3. return; 4. } 5. postorder(root.left, res); 6. postorder(root.right, res); 7. res.add(root.val); 8. }
}
```
三、Leetcode 94. 二叉树的中序遍历
1.题目
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
提示:
1. 树中节点数目在范围 [0, 100] 内 2. -100 <= Node.val <= 100
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/binary-tree-inorder-traversal
2.解题思路
方法一:递归
首先我们需要了解什么是二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。
定义 inorder(root) 表示当前遍历到 rootroot 节点的答案,那么按照定义,我们只要递归调用 inorder(root.left) 来遍历 rootroot 节点的左子树,然后将 rootroot 节点的值加入答案,再递归调用inorder(root.right) 来遍历 rootroot 节点的右子树即可,递归终止的条件为碰到空节点。
3.代码实现
```java class Solution { public List inorderTraversal(TreeNode root) { List res = new ArrayList (); inorder(root, res); return res; }
1. public void inorder(TreeNode root, List<Integer> res) { 2. if (root == null) { 3. return; 4. } 5. inorder(root.left, res); 6. res.add(root.val); 7. inorder(root.right, res); 8. }