給你二叉樹的根節(jié)點(diǎn) root ,返回它節(jié)點(diǎn)值的 前序 遍歷。
image.png
[1,7,8,null,2,3,4,2,3,4,null,5]
提示:
樹中節(jié)點(diǎn)數(shù)目在范圍 [0, 100] 內(nèi)
-100 <= Node.val <= 100
/**
* 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 newArrL = [], newArrR = []
if (!root || root.length == 0) {return []}
if (root.left == null && root.right == null ) {
return [root.val]
} else {
if (root.left != null) {
let temp = preorderTraversal(root.left)
newArrL = newArrL.concat(temp)
}
if (root.right != null) {
let temp = preorderTraversal(root.right)
newArrR = newArrR.concat(temp)
}
}
const newa = [root.val].concat(newArrL, newArrR)
return newa
};
進(jìn)階:遞歸算法很簡單,你可以通過迭代算法完成嗎?
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function(root) {
let queue = []
let arr = []
while(root) {
queue.push(root)
arr.push(root.val)
root = root.left
}
let next = function() {
root = queue.pop()
if (root.right) {
root = root.right
while(root) {
queue.push(root)
arr.push(root.val)
root = root.left
}
}
}
let hasNext = function() {
return queue.length > 0
}
while(hasNext()){
next()
}
return arr
}