劍指offer(57)二叉樹的下一個節點
阿新 • • 發佈:2018-08-24
需要 div 2種 color 節點 兩種 我們 cti 指向
題目描述
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。註意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
題目分析
這題一定要畫圖,因為只有畫圖我們才能分清楚下一個節點有哪些情況
1.如果一個節點有右子樹,那麽它的下一個節點就是它的右子樹中的最左子節點。也就是說,從右子節點出發一直沿著指向左子節點的指針,我們就能找到下一個節點。
2.如果沒有右子樹,又可以分為兩種情況
- 如果節點是它父節點的左子節點,那麽它的下一個節點就是它的父節點。
- 如果一個節點既沒有右子樹,並且它還是父節點的右子節點,那麽需要沿著指向父節點的指針一直向上便利,直到找到一個是它父節點的左子節點的節點。
代碼
function GetNext(pNode) { if(pNode == null){ return null; } if(pNode.right != null){//第1種 pNode = pNode.right; while(pNode.left != null){ pNode = pNode.left; } return pNode; } while(pNode.next != null){ //第2種 if(pNode == pNode.next.left){return pNode.next; } pNode = pNode.next; } return null; }
劍指offer(57)二叉樹的下一個節點