08.二叉树的下一个节点
题目
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示
思路
使用中序遍历即可解题。但是这题只给了一个参数,就是需要寻找下一个节点的节点,并没有给出根节点。
但是题目中说明了每一个节点都有一个 next
属性指向父节点。所以我们可以先找到 root
节点,然后再中序遍历即可。
代码
/*function TreeLinkNode(x){
this.val = x;
this.left = null;
this.right = null;
this.next = null;
}*/
function GetNext(pNode)
{
let newNode = pNode
while(newNode.next !== null) {
newNode = newNode.next
}
let res = []
const dfs = function(root) {
if(root === null) return
dfs(root.left)
res.push(root)
dfs(root.right)
}
dfs(newNode)
for(let i = 0; i < res.length; i++) {
if(res[i] === pNode) {
return res[i+1]
}
}
}
module.exports = {
GetNext : GetNext
};