- 分三种情况
- 节点为根节点
- 节点为某个节点的左孩子
- 节点为某个节点的右孩子(这种情况比较复杂,要向上找某个节点是其父节点的左孩子)
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode.next==null)
{
if(pNode.right==null)
{
return null;
}
else{
return midVisit(pNode.right);
}
}
else if(pNode.next.left!=null&&pNode.next.left==pNode)
{
if(pNode.right!=null)
{
return midVisit(pNode.right);
}
else{
return pNode.next;
}
}
else{
if(pNode.right==null)
{
TreeLinkNode t = pNode.next;
while(t.next!=null&&t.next.left!=t)
{
t = t.next;
}
if(t.next==null)
{
return null;
}
else{
return t.next;
}
}
else{
return midVisit(pNode.right);
}
}
}
private TreeLinkNode midVisit(TreeLinkNode node)
{
if(node.left!=null)
{
return midVisit(node.left);
}
return node;
}