<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 小明 閱讀(2138) 評論(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永久无码精品天堂久久| 亚洲精品免费在线观看| 亚洲一本综合久久| 日韩免费人妻AV无码专区蜜桃| 亚洲国产一区在线| a拍拍男女免费看全片| 亚洲精品动漫在线| 99无码人妻一区二区三区免费| 亚洲另类精品xxxx人妖| 国产精品美女午夜爽爽爽免费| 亚洲人成色77777在线观看| 国产在线观看免费视频播放器| 黄色三级三级免费看| 国产成人精品日本亚洲专区61| 91视频精品全国免费观看| 久久综合亚洲色HEZYO社区| 亚洲天堂免费在线| 亚洲av无码成人影院一区| 亚洲七七久久精品中文国产| 中文成人久久久久影院免费观看| 久久亚洲美女精品国产精品| 国产精品1024永久免费视频| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲国产中文字幕在线观看| 久久久久久AV无码免费网站下载 | 亚洲精品乱码久久久久久| 久久久久国产精品免费免费不卡| 亚洲国产精品网站久久| 日韩免费福利视频| 国产在线国偷精品免费看| 亚洲宅男天堂a在线| 免费一级毛片女人图片| 无码av免费一区二区三区试看| 亚洲男人天堂2018av| 久久久久国产成人精品亚洲午夜 | 无码人妻精品中文字幕免费| 亚洲中文字幕久久久一区|