[劍指offer][Java]二叉樹的下一個(gè)節(jié)點(diǎn)

題目

給定一個(gè)二叉樹和其中的一個(gè)結(jié)點(diǎn),請找出中序遍歷順序的下一個(gè)結(jié)點(diǎn)并且返回。注意,樹中的結(jié)點(diǎn)不僅包含左右子結(jié)點(diǎn),同時(shí)包含指向父結(jié)點(diǎn)的指針。

程序核心思想

如果這個(gè)節(jié)點(diǎn)的右孩子不為空,那么它的下一個(gè)節(jié)點(diǎn)一定在它的右子樹上,所以再檢查它的右子樹,返回它右子樹的最左的節(jié)點(diǎn)(如果有的話),否則返回右子樹的根節(jié)點(diǎn)。
如果這個(gè)節(jié)點(diǎn)的右孩子為空,那么檢查它是否是它父節(jié)點(diǎn)的右節(jié)點(diǎn),如果不是(那就是它父節(jié)點(diǎn)的左節(jié)點(diǎn)),那么返回它的父節(jié)點(diǎn);如果是(它父節(jié)點(diǎn)的右節(jié)點(diǎn)),那么返回讓它指向它的父節(jié)點(diǎn),再次做同樣的檢查(是否是它父節(jié)點(diǎn)的右節(jié)點(diǎn)),直到他的父節(jié)點(diǎn)為空,那么意為著題目給出的這個(gè)節(jié)點(diǎn)是整棵樹的最右的節(jié)點(diǎn),則返回null。

Tips

在做pNode == pNode.next.right這種一個(gè)指針后面還有指針的操作時(shí),要保證第一個(gè)不為空指針,方法可以是pNode.next != null && pNode == pNode.next.right。

代碼

/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode == null)    return null;
        
        while(true){
            if(pNode.right != null){
                pNode = pNode.right;
                while(pNode.left != null){
                    pNode = pNode.left;
                }
                return pNode;
            }else{
                while(pNode.next != null  && pNode == pNode.next.right){
                    pNode = pNode.next;
                }
                if(pNode.next == null || pNode.next == pNode){
                    return null;
                }
                return pNode.next;
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,601評論 0 13
  • 1.樹和二叉樹的定義 (1) 樹的定義 樹是n (n≥0) 個(gè)結(jié)點(diǎn)的有限集。 n=0 時(shí)稱為空樹。在任意一棵非空樹...
    yinxmm閱讀 2,578評論 0 3
  • 1. 二叉樹的深度 分析:如果一棵樹只有一個(gè)結(jié)點(diǎn),它的深度為1。否則樹的深度就是其左、右子樹深度的較大值再加1。 ...
    HungerDeng閱讀 576評論 0 0
  • 以此文記錄學(xué)習(xí) 數(shù)據(jù)結(jié)構(gòu)-樹 的相關(guān)知識,以備后續(xù)回顧復(fù)習(xí)。 一、樹 定義: 樹(Tree)是n(n>=0)個(gè)結(jié)點(diǎn)...
    逐日追星看月亮閱讀 647評論 0 0
  • 要學(xué)習(xí)紅黑二叉樹,就得先了解二叉樹是什么,二叉樹是有限個(gè)元素得集合,這些元素集合構(gòu)成樹,二叉樹允許集合元素個(gè)數(shù)為0...
    huwei30閱讀 1,511評論 0 0

友情鏈接更多精彩內(nèi)容