JZ57 二叉树的下一个结点
原题链接
描述
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。
示例1
输入:{8,6,10,5,7,9,11},8
返回值:9
示例2
输入:{8,6,10,5,7,9,11},6
返回值:7
示例3
输入:{5},5
返回值:"null"
说明:不存在,后台打印"null"
思路
给了二叉树的层次遍历,以及其中的某个结点,求中序遍历该结点的下一个结点。
如果该结点是其父节点的左孩子,那中序遍历下一个结点就是父节点;
若果是右孩子,那中序遍历下一个结点~父节点是爷爷结点的左孩子还是右孩子;
有点递归的感觉。
如果右孩子存在,优先返回右孩子的最左子结点,否则返回右孩子;
右孩子不存在,一直向上找当前结点的父亲结点,如果当前结点是父节点的左孩子,返回父节点,否则当前结点指向父亲结点,继续找他的父亲结点,判断是否为左孩子,直到根节点,说明该结点中序遍历是最后一个。
解答
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode) {
//该结点右孩子不空
if (pNode.right != null){
TreeLinkNode tmp = pNode.right;
while (tmp.left != null){
tmp = tmp.left;
}
return tmp;
}
else{
while (pNode.next != null){
if (pNode.next.left == pNode)
return pNode.next;
pNode = pNode.next;
}
}
return null;
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15104979.html