先画一个二叉树:
![]()
Java方式实现找到一个二叉树中序遍历的下一个节点思路:😃
- 如果一个节点有右子树的时候,那么它的下一个节点就是它的右子树中的最左子节点。(比如说b的下一个节点是h,可以试着画一个二叉树)😗
- 如果一个节点没有右子树的时候,并且节点是它的父节点的左子节点,那么该节点的下一个节点就是它的父节点。(比如说d的下一个节点是b)
- 如果一个节点没有右子树,并且它还是它父节点的右子节点的话,那么我们可以看着上面这幅图,假定一个符合情况的节点是目标节点(比如说 i),我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点。如果这样的节点存在的话,那么这个节点的父节点就是我们要找的下一个节点。
下面是代码:🤣
public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode parent = null; TreeLinkNode(int val) { this.val = val; } } public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode == null) return null; TreeLinkNode pNext = null; //当该节点有右子树的时候 if(pNode.right != null){ TreeLinkNode pRight = pNode.right; while(pRight.left != null) pRight = pRight.left; pNext = pRight; }else if(pNode.parent != null){ //当该节点父节点不为空的时候 TreeLinkNode pCurrent = pNode; TreeLinkNode pParent = pNode.parent; //while这里包括两个情况while里面一个,外面一个 while(pParent != null && pCurrent == pParent.right){ pCurrent = pParent; pParent = pParent.parent; } pNext = pParent; } return pNext; } }