//思路:
//1、如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;
<div align="center"><img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/b0611f89-1e5f-4494-a795-3544bf65042a.gif" width="280px"/></div>
//否则,向上找第一个左链接指向的树包含该节点的祖先节点。
<div align="center"><img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/95080fae-de40-463d-a76e-783a0c677fec.gif" width="250px"/></div>
public TreeLinkNode GetNext(TreeLinkNode pNode){
if(pNode==null){
return null;
}
if(pNode.right!=null){
//先判断 pNode 的右子树不为 null,
//pNode 的下一个结点就是 pNode 右子树的最左结点
TreeLinkNode node = pNode.right; //pNode 的右子树
while(node.left!=null){
node = node.left;
}
return node;
}else{ //否则,向上找第一个左连接指向的树包含该节点的祖先节点
while (pNode.next!=null){
TreeLinkNode parent = pNode.next;
if(parent.left==pNode){
return parent;
}
pNode = pNode.next;
}
}
return null;
}
https://www.mianshi.online,https://www.i9code.cn
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。