二叉树的后序遍历
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class BinaryTreePostorderTraversal {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
method(root, list);
return list;
}
/**
* 递归实现
*
* @param root
* @param list
*/
private void method(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
method(root.left, list);
method(root.right, list);
list.add(root.val);
}
/**
* 迭代实现
* 执行结果:通过
* 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
* 内存消耗:39.4 MB, 在所有 Java 提交中击败了75.67%的用户通过
* 测试用例:68 / 68
*
* @param root
* @param list
*/
private void method1(TreeNode root, List<Integer> list) {
Stack<TreeNode> stack = new Stack<TreeNode>();
Stack<TreeNode> stack1 = new Stack<TreeNode>();
if (root == null) {
return;
}
stack.add(root);
while (!stack.isEmpty()) {
TreeNode pop = stack.pop();
stack1.add(pop);
if (pop.left != null) {
stack.add(pop.left);
}
if (pop.right != null) {
stack.add(pop.right);
}
}
while (!stack1.isEmpty()) {
list.add(stack1.pop().val);
}
}
}
评论区