解题思路
递归
递归思路很简单,首先递归左子树,然后将根结点的值添加到结果集中,最后递归右子树
递归终止条件:节点为空
代码如下
ArrayList res = new ArrayList<>();public ListinorderTraversal(TreeNode root) { dfs(root); return res;}public void dfs(TreeNode root) { if (root == null) { return; } //中序遍历 dfs(root.left); res.add(root.val); dfs(root.right);}
复习一下前序遍历和后序遍历
思路都是一样的,区别仅仅在于递归到一个非空节点上时,递归左右子树和将自身的值添加到结果集中先后顺序的区别
前序遍历
ArrayList res = new ArrayList<>();public ListinorderTraversal(TreeNode root) { dfs(root); return res;}public void dfs(TreeNode root) { if (root == null) { return; } //前序遍历 res.add(root.val); dfs(root.left); dfs(root.right);}
后序遍历
ArrayList res = new ArrayList<>();public ListinorderTraversal(TreeNode root) { dfs(root); return res;}public void dfs(TreeNode root) { if (root == null) { return; } //后序遍历 dfs(root.left); dfs(root.right); res.add(root.val);}
最后做一下简单的总结,二叉树的前序、中序、后序遍历方式本质上都是一样的,都是不断递归左子树和右子树,区别仅仅在于访问递归节点值的顺序上。