都是和二叉树的节点/路径相关的题目:
二叉树中和为某一值的路径
二叉树的所有路径
二叉搜索树中第K小的节点
二叉树中和为某一值的路径
老样子,看到这道题第一还是递归。但是这题写下来的感觉是那种看上去不难,但是很容易写错细节
需要注意的有几个点⚠️
1. 暂停递归的点有三个条件:无左/右子节点,总和等于期望值。这个位置需要设置好
2. 必须写slice用于浅拷贝,不然用的都是同一个地址,会对结果有影响
var pathSum = function(root, target) {
if(!root) return []
const res=[]
function tra(root,remain,tmp){
if(root.val===remain&&!root.left&&!root.right){
res.push(tmp)
}
tmp.push(root.val)
if(root.left) tra(root.left,remain-root.val,tmp.slice())
if(root.right) tra(root.right,remain-root.val,tmp.slice())
}
tra(root,target,[])
return res
};
二叉树的所有路径
这道题主要需要注意的点是什么时候加上节点的值、什么时候加上箭头
var binaryTreePaths = function(root) {
let res=[]
function tra(root,str){
str+=root.val
if(!root.left&&!root.right){
res.push(str)
}
str+='->'
if(root.left) tra(root.left,str)
if(root.right) tra(root.right,str)
}
tra(root,'')
return res
};
二叉搜索树中第K小的节点
中序遍历+stack[k-1]
var kthSmallest = function(root, k) {
let stack=[]
function tra(root,stack){
if(!root){
return stack
}
tra(root.left,stack)
stack.push(root.val)
tra(root.right,stack)
return stack
}
tra(root,stack)
return stack[k-1]
};