1。如果一个树有右子树,那么他右子树的最左节点就是它的下一个节点。
2。如果节点没有右子树,并且它是它父节点的左子树,那么它的下一个节点就是父子树。
3。如果一个树没有左,右子树,那么它的父节点上第一个是父节点左子树的树就是它的下一个节点,如果直到根节点前都没有左子树,那么就没有下一个节点。
JAVA:
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode==null)
return null;
if(pNode.right!=null){
pNode = pNode.right;
while(pNode.left!=null)
pNode=pNode.left;
return pNode;
}
while(pNode.next!=null){
if(pNode==pNode.next.left)
return pNode.next;
pNode=pNode.next;
}
return null;
}
}
C++:
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
}
};
*/
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==NULL)
return NULL;
TreeLinkNode *p = pNode;
if (p->right){
p = p->right;
while (p->left){
p = p->left;
}
return p;
}
else{
while (p->next){
if (p == p->next->left)
return p->next;
p = p->next;
}
return NULL;
}
}
};