<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小明思考

    Just a software engineer
    posts - 124, comments - 36, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    設置二叉樹的next節點

    Posted on 2013-04-26 11:23 小明 閱讀(2133) 評論(0)  編輯  收藏 所屬分類: 數據結構和算法
    問題給定一顆二叉樹:
    class TreeLinkNode {
      TreeLinkNode left;
      TreeLinkNode right;
      TreeLinkNode next;
    }
    要求把所有節點的next節點設置成它右邊的節點,如果沒有右節點,設置成空。初始狀態,所有的next的指針均為null.

    要求:你只能使用常數的空間。

    比如:
             1
           /  \
          2    3
         / \    \
        4   5    7
    應該輸出:

    1 -> NULL
           /  \
          2 -> 3 -> NULL
         / \    \
        4-> 5 -> 7 -> NULL

    分析:
    題目不難,但是在面試時,在有限的時間內,沒有bug寫出,還是很考驗功力的。

    解決這個問題的思路是逐層掃描,上一層設置好下一層的next關系,在處理空指針的時候要格外小心。
    代碼如下,有注釋,應該很容易看懂:
    使用了三個指針:
    node:當前節點
    firstChild:下一層的第一個非空子節點
    lastChild:下一層的最后一個待處理(未設置next)的子節點

        public void connect(TreeLinkNode root) {
            TreeLinkNode node = root;
            TreeLinkNode firstChild = null;
            TreeLinkNode lastChild = null;
            
            while(node!=null){
                if(firstChild == null){ //記錄第一個非空子節點
                    firstChild = node.left!=null?node.left:node.right;
                }
                //設置子節點的next關系,3種情況
                if(node.left!=null && node.right!=null){ 
                    if(lastChild!=null){
                        lastChild.next = node.left;
                    }
                    node.left.next = node.right;
                    lastChild = node.right;
                }
                else if(node.left!=null){
                    if(lastChild!=null){
                        lastChild.next = node.left;
                    }
                    lastChild = node.left;
                }
                else if(node.right!=null){
                    if(lastChild!=null){
                        lastChild.next = node.right;
                    }
                    lastChild = node.right;
                }
                //設置下一個節點,如果本層已經遍歷完畢,移到下一層的第一個子節點
                if(node.next!=null){
                    node = node.next;
                }
                else{
                    node = firstChild;
                    firstChild = null;
                    lastChild = null;
                }
            }
        }
    主站蜘蛛池模板: 日韩在线视频线视频免费网站| 中文字幕免费高清视频| 午夜亚洲av永久无码精品| 亚洲今日精彩视频| 国产亚洲综合精品一区二区三区| 曰批全过程免费视频在线观看| 亚洲产国偷V产偷V自拍色戒| 含羞草国产亚洲精品岁国产精品| 日本免费中文视频| 亚洲中文字幕无码永久在线| 三级片免费观看久久| 久久亚洲国产精品| 啦啦啦手机完整免费高清观看| 亚洲高清中文字幕| 四虎永久免费影院在线| 亚洲精品免费在线观看| 日韩亚洲综合精品国产| 亚洲AV成人无码久久精品老人| 免费无遮挡无码视频网站| 免费播放在线日本感人片| 亚洲色偷偷色噜噜狠狠99| 亚洲一级特黄无码片| 三上悠亚电影全集免费 | 久久久久亚洲精品影视| 18禁超污无遮挡无码免费网站国产| 一级毛片免费不卡直观看| 亚洲丰满熟女一区二区v| 亚洲亚洲人成综合网络| 手机在线免费视频| 国产亚洲综合久久| 亚洲人成777在线播放| 亚洲va中文字幕无码久久不卡| 日本媚薬痉挛在线观看免费| 2021国内精品久久久久精免费| 无码毛片一区二区三区视频免费播放 | 亚洲gay片在线gv网站| 久久青青成人亚洲精品| 亚洲国产精品毛片av不卡在线| 久久久久久国产a免费观看黄色大片 | 噜噜综合亚洲AV中文无码| 亚洲日韩区在线电影|