117. Populating Next Right Pointers in Each Node II

https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/#/description

在做116題的時候我就感覺那解法雖然短但是有點tricky了,都沒有用到一個鏈表來存儲每一行的list。
這題就發現上一題的解法不好適用了。于是老老實實去學了一下標準套路。
我發現這種題的套路還是要靜下心來看,在圖上好好畫一步步學。不知道真正面對一道陌生的樹的題目時我什么時候能想出答案來。

下面的代碼參考了leetcode solution里的代碼。code ganker那個也是類似的layer order traverse的思想,但是他代碼維護了4個node,有點復雜。

    //based on level order traversal
    public void connect(TreeLinkNode root) {

        TreeLinkNode cur = root;
        TreeLinkNode pre = null; //下一level的dummyNode
        TreeLinkNode head = null; //下一level的head node

        while (cur != null) {
            //外層while用于移動到下一level,內層while用于同一層level order traverse
            while (cur != null) {
                if (cur.left != null) {
                    if (pre != null) {
                        pre.next = cur.left;
                    } else {
                        head = cur.left;
                    }
                    //無論pre是否
                    pre = cur.left;
                }

                if (cur.right != null) {
                    if (pre != null) {
                        pre.next = cur.right;
                    } else {
                        head = cur.right;
                    }
                    pre = cur.right;
                }
                //想象一個perfect binary tree,在pre到達第3層的時候,cur是第二層,cur的next已經被之前的pre鏈接起來了
                cur = cur.next;
            }

            //move to next level
            cur = head;
            pre = null;
            head = null;
        }
    }
draft

看看自己的草稿覺得好像挺高深的。。Zhengyu說我走火入魔了。。在公司待了兩天半。。下午去博物館散散心了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容