144二叉树的前序遍历
思路
根据据条件,实现递归需要两步:
1.找出重复的子问题(递推公式)。
2.终止条件。
转换为:
(1) 找出重复的子问题
前序遍历的顺序是:根、左子树、右子树。
对于左子树或者右子树来说,也是同样的遍历顺序。
所以重复的子问题:先取根节点,再遍历左子树,最后遍历右子树。
(2) 确定终止条件
对于二叉树的遍历来说,想终止,即没东西遍历了,没东西遍历自然就停下来了。
那就是当前的节点是空的,既然是空的就没必要遍历了。
代码
class Solution {public void preOrder(TreeNode root, List<Integer> res) {if (root == null) {return;}res.add(root.val);preOrder(root.left, res);preOrder(root.right, res);}public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();preOrder(root, res);return res;}}
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution:def preOrder(self, root: TreeNode, res):if root == None:returnres.append(root.val)self.preOrder(root.left, res)self.preOrder(root.right, res)def preorderTraversal(self, root: TreeNode) -> List[int]:res = []self.preOrder(root, res)return res
94二叉树的中序遍历
思路
中序遍历,按照 左-打印-右这种顺序遍历树即可
递归函数实现
终止条件:当前节点为空时
函数内:递归的调用左节点,打印当前节点,再递归调用右节点
代码
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();dfs(res,root);return res;}void dfs(List<Integer> res, TreeNode root) {if(root==null) {return;}dfs(res,root.left);res.add(root.val);dfs(res,root.right);}}
class Solution(object):def inorderTraversal(self, root):""":type root: TreeNode:rtype: List[int]"""res = []def dfs(root):if not root:returndfs(root.left)res.append(root.val)dfs(root.right)dfs(root)return res
145二叉树的后序遍历
思路
后序遍历:左、右、根,对于左子树、右子树来说,也是同样的遍历顺序。
重复子问题就:先遍历左子树、再遍历右子树、再取根节点。
终止条件:当前节点为空,没啥好遍历的。
代码
class Solution {public void postorder(TreeNode root, List<Integer> res) {if (root == null) {return;}postorder(root.left, res);postorder(root.right, res);res.add(root.val);}public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();postorder(root, res);return res;}}
# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution:def postOrder(self, root: TreeNode, res):if root == None:returnself.postOrder(root.left, res)self.postOrder(root.right, res)res.append(root.val)def postorderTraversal(self, root: TreeNode) -> List[int]:res = []self.postOrder(root, res)return res





