题目描述:
给定一个二叉树,返回它的 后序 遍历。
后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。
示例:
输入: [1,null,2,3]
输出: [3,2,1]
题解:
1.解题思路:利用递归算法
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var postorderTraversal = function(root) {
var ret = []
postorder(root, ret)
return ret
function postorder(root, ret) {
if (root === null) {
return ret
}
postorder(root.left, ret)
postorder(root.right, ret)
ret.push(root.val)
}
};
2.解题思路:利用迭代算法
var postorderTraversal = function(root) {
var ret = []
if (root == null) {
return ret
}
var stack = [],
node = root,
prev = null;
while (stack.length > 0 || node !== null) {
while (node !== null) {
stack.push(node)
node = node.left
}
node = stack.pop()
if (node.right === null || node.right === prev) {
ret.push(node.val)
prev = node
node = null
} else {
stack.push(node)
node = node.right
}
}
return ret
};