1. 程式人生 > >劍指offer(57)二叉樹的下一個節點

劍指offer(57)二叉樹的下一個節點

需要 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)二叉樹的下一個節點