二叉树的三种遍历方式,最常用且简单的就是递归来实现的。
下面分享在LeetCode做的二叉树后序遍历算法。
//二叉树的后序遍历算法,java语言实现
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> res = new ArrayList<Integer>();
helper(root, res);//摆脱桎梏(gu)此处可以把ArrayList也作为参数传过去
return res;
}
private void helper(TreeNode root, ArrayList<Integer> res)
{
if(root == null)
return;//此句话保证{},即空二叉树情况,能够顺利运行!
helper(root.left,res);
helper(root.right,res);
res.add(root.val);
}
public class Solution {
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> res = new ArrayList<Integer>();
helper(root, res);
return res;
}
private void helper(TreeNode root, ArrayList<Integer> res)
{
if(root == null)
return;
//这一种可能更容易理解一点,就是一直遍历左子树,遇到null
//试着遍历同级的右子树,然后继续递归
TreeNode leftTree = root.left;
if (leftTree!= null) {
helper(leftTree,res);
}
TreeNode rightTree = root.right;
if (rightTree!= null) {
helper(rightTree,res);
}
res.add(root.val);//记住此处添加root的成员变量val
}
}