回忆一下递归实现
/**
/**
* 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 preorderTraversal = function(root) {
var retArr = []
if (!root) return retArr
var helpFunc = (r) => {
if (!r)return
retArr.push(r.val)
if (r.left) { helpFunc(r.left) }
if (r.right) { helpFunc(r.right)}
}
helpFunc(root)
return retArr
}
用模拟栈来实现(方法一)
var preorderTraversal = function(root) {
var retArr = []
if (!root) return retArr
var stack = []
stack.push(root)
while(stack.length !== 0) {
var popE = stack.pop()
retArr.push(popE.val)
if (popE.right) {
stack.push(popE.right)
}
if (popE.left) {
stack.push(popE.left)
}
}
return retArr
}
用模拟栈来实现(方法二) ( 二三写法不一样,但是本质是一致)
var preorderTraversal = function(root) {
var retArr = []
if (!root) return retArr
var stack = []
var cur = root
while(stack.length != 0 || cur) {
// 把所有左子节点入栈
while(cur) {
retArr.push(cur.val)
stack.push(cur)
cur = cur.left
}
var tmp = stack.pop()
cur = tmp.right
}
}
用模拟栈来实现(方法三)( 二三写法不一样,但是本质是一致)
var preorderTraversal = function(root) {
var retArr = []
if (!root) return retArr
var stack = []
var cur = root
while(stack.length != 0 || cur) {
// 把所有左子节点入栈
if(cur) {
retArr.push(cur.val)
stack.push(cur)
cur = cur.left
} else {
var tmp = stack.pop()
cur = tmp.right
}
}
}
根左右 【前序】
左根右 【中序】
根右左 【后序–逆向】
右根左 【中序–逆向】