<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 小明 閱讀(2123) 評論(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;
                }
            }
        }
    主站蜘蛛池模板: 女人18毛片水真多免费看| 久久一本岛在免费线观看2020| 成人免费视频77777| 亚洲国产精品白丝在线观看| 91精品成人免费国产片| 久久久久亚洲AV成人片| h视频在线观看免费完整版| 亚洲欧洲日产国码二区首页| 亚洲黄色免费观看| 亚洲无mate20pro麻豆| 成年人网站在线免费观看| 亚洲精品无码专区久久| 国产精品国产自线拍免费软件| 国产精品亚洲专区无码牛牛| 国产一级做a爱免费视频| 一级毛片视频免费观看| 亚洲乱亚洲乱妇无码麻豆| 全免费a级毛片免费看| 亚洲自偷自拍另类图片二区| 日韩免费a级毛片无码a∨| 人人狠狠综合久久亚洲 | 久久电影网午夜鲁丝片免费| 亚洲欧洲精品成人久久曰| 亚洲成A人片在线观看中文| 国产福利免费视频| 亚洲伊人久久大香线蕉苏妲己| 韩国免费一级成人毛片| 黄页网站在线免费观看| 国产成人亚洲综合无码精品| 在线看片韩国免费人成视频| 精品女同一区二区三区免费播放 | 亚洲中文字幕久久精品无码喷水 | 亚洲美女视频免费| 好爽好紧好大的免费视频国产| 亚欧国产一级在线免费| 亚洲福利一区二区精品秒拍| 国产精品免费看久久久久| 国内永久免费crm系统z在线| 亚洲一区在线免费观看| 久久夜色精品国产亚洲av| 妻子5免费完整高清电视|