劍指Offer-二叉樹-(10)
阿新 • • 發佈:2018-12-18
知識點/資料結構:二叉樹
題目描述:
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
思路
注意二叉樹的節點的定義:樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
也就是三個屬性;
/* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; 這個是父親節點的指標 TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; } } */
所有的節點又如下幾類:
1:節點有右子樹,它的下一個節點就是它的右子樹的最左子節點;
2:節點沒有右子樹,且它是父節點的左子節點,那麼它的下一個節點就是它的父節點;
3:節點沒有右子樹,且它是父節點的右子節點,那麼沿著指向父節點的指標向上遍歷,直到找到一個是“它父節點的左子節點的節點”。
上程式碼:
public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { //疑問?怎麼表示右子樹不為空node.right!=null //當前節點的右子樹,子樹必須有左節點或者右節點不為空 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.next.left==pNode)return pNode.next; pNode=pNode.next; } return null; } }