144. 二叉树的前序遍历
leetcode-cn.com/problems/bi…
var preorderTraversal = function(root) {
if(root === null){
return []
}
const left = preorderTraversal(root.left)
const right = preorderTraversal(root.right)
return [root.val,...left,...right]
};
var preorderTraversal = function(root) {
const stack = [root]
const res = []
while(stack.length){
const node = stack.pop()
if(!node) continue
res.push(node.val)
stack.push(node.right)
stack.push(node.left)
}
return res
};
- 三色标记法
- 用白色表示尚未访问
- 灰色表示尚未完全访问子节点
- 黑色表示子节点全部访问
var preorderTraversal = function(root) {
const White = 0
const Gray = 1
const stack = [{
color:White,
node:root
}]
const res = []
while(stack.length){
const {color,node} = stack.pop()
if(!node) continue
if(color === White){
stack.push({
color:White,
node:node.right
})
stack.push({
color:White,
node:node.left
})
stack.push({
color:Gray,
node:node
})
}else{
res.push(node.val)
}
}
return res
};
94. 二叉树的中序遍历
leetcode-cn.com/problems/bi…
var inorderTraversal = function(root) {
if(root === null){
return []
}
const left = inorderTraversal(root.left)
const right = inorderTraversal(root.right)
return [...left,root.val,...right]
};
- 栈 一直从跟节点往左子树遍历直到走到尽头 在往父节点回溯
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function (root) {
const stack = []
let curr = root
const res = []
while(stack.length || curr){
while(curr){
stack.push(curr)
curr = curr.left
}
curr = stack.pop()
res.push(curr.val)
curr = curr.right
}
return res
}
var inorderTraversal = function (root) {
const White = 0
const Gray = 1
const stack = [{
color: White,
node: root
}]
const res = []
while (stack.length) {
const { color, node } = stack.pop()
if (!node) continue
if (node && color === White) {
stack.push({
color: White,
node: node.right
})
stack.push({
color: Gray,
node: node
})
stack.push({
color: White,
node: node.left
})
} else {
res.push(node.val)
}
}
return res
};
145. 二叉树的后序遍历
leetcode-cn.com/problems/bi…
var postorderTraversal = function(root) {
if(!root){
return []
}
const left = postorderTraversal(root.left)
const right = postorderTraversal(root.right)
return [...left,...right,root.val]
};
var postorderTraversal = function(root) {
const stack = [root]
const res = []
while(stack.length){
const node = stack.pop()
if(!node) continue
res.unshift(node.val)
stack.push(node.left)
stack.push(node.right)
}
return res
};
var postorderTraversal = function(root) {
const White = 0
const Gray = 1
const stack = [{
color:White,
node:root
}]
const res = []
while(stack.length){
const {color,node} = stack.pop()
if(!node) continue
if(color === White){
stack.push({
color:Gray,
node:node
})
stack.push({
color:White,
node:node.right
})
stack.push({
color:White,
node:node.left
})
}else{
res.push(node.val)
}
}
return res
};
674. 最长连续递增序列
leetcode-cn.com/problems/lo…
/**
* @param {number[]} nums
* @return {number}
*/
var findLengthOfLCIS = function (nums) {
if (!nums.length) return 0
let maxCounter = 1
let counter = 1
for (let i = 1
if (nums[i] > nums[i - 1]) {
counter++
} else {
counter = 1
}
maxCounter = Math.max(maxCounter, counter)
}
return maxCounter
}