1. 题目描述

给定一个二叉树,返回它的后序遍历。

示例:

  1. 输入: [1,null,2,3]
  2. 1
  3. \
  4. 2
  5. /
  6. 3

输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

2. 实现思路

二叉树的后序遍历和前序遍历是一个相反的过程,所以基本思路和前序遍历类似。初始化一个栈和结果数组,将根节点放入栈中,当栈不为空时,重复下面的步骤:
(1)取出栈顶元素top,访问top
(2)将取出的栈顶元素top放入结果数组的最开始
(3)若top的左子节点不为空,将top的左子节点放入栈中
(4)若top的右子节点不为空,将top的右子节点放入栈中

3. 代码实现

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {number[]}
  11. */
  12. var postorderTraversal = function(root) {
  13. if(!root){
  14. return [];
  15. }
  16. var result = []
  17. var stack = [root]
  18. while(stack.length!==0){
  19. var top = stack.pop();
  20. result.unshift(top.val);
  21. if(top.left){
  22. stack.push(top.left);
  23. }
  24. if(top.right){
  25. stack.push(top.right);
  26. }
  27. }
  28. return result;
  29. };

4. 提交结果

145. 二叉树的后序遍历 - 图1