將二叉樹拆成鏈表

描述

將一棵二叉樹按照前序遍歷拆解成為一個(gè)假鏈表。所謂的假鏈表是說,用二叉樹的 right 指針,來表示鏈表中的 next 指針。

注意事項(xiàng)

不要忘記將左兒子標(biāo)記為 null,否則你可能會(huì)得到空間溢出或是時(shí)間溢出。

樣例

                1
                  \
     1             2
    / \               \
   2   5    =>         3
  / \   \                \
 3   4   6                 4
                             \
                               5
                                 \
                                  6

標(biāo)簽

二叉樹&深度優(yōu)先搜索

相關(guān)題目

Flattern 2D Vector & 攤平嵌套的鏈表 &將二叉樹按照層級(jí)轉(zhuǎn)換為鏈表 &
將二叉查找樹轉(zhuǎn)換為雙鏈表&排序鏈表轉(zhuǎn)換為二叉樹

代碼實(shí)現(xiàn)

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */
    public void flatten(TreeNode root) {
         helper(root);
    }
    // flatten root and return the last node
    private TreeNode helper(TreeNode root) {
        if (root == null) {
            return root;
        }
        TreeNode leftLast = helper(root.left);
        TreeNode rightLast = helper(root.right);

        // connect leftLast to root.right
        //root.right 接到leftLast的右子樹
        //root.left置null
        if (leftLast != null) {
            leftLast.right = root.right;
            root.right = root.left;
            root.left = null;
        }
        //返回新鏈表的最后一個(gè)節(jié)點(diǎn)
        //因?yàn)槭乔靶虮闅v,必然先判斷右子樹,再左子樹,最后根節(jié)點(diǎn)
        if (rightLast != null) {
            return rightLast;
        }
        if (leftLast != null) {
            return leftLast;
        }
        return root;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 描述 將一棵二叉樹按照前序遍歷拆解成為一個(gè)假鏈表。所謂的假鏈表是說,用二叉樹的 right 指針來表示鏈表中的 n...
    6默默Welsh閱讀 743評(píng)論 0 0
  • 題目 將一棵二叉樹按照前序遍歷拆解成為一個(gè)假鏈表。所謂的假鏈表是說,用二叉樹的 right 指針,來表示鏈表中的 ...
    六尺帳篷閱讀 646評(píng)論 0 1
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 難度:容易 要求: 將一棵二叉樹按照前序遍歷拆解成為一個(gè)假鏈...
    柒黍閱讀 332評(píng)論 0 0
  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu),樹與前面介紹的線性表,棧,隊(duì)列等線性結(jié)構(gòu)不同,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,764評(píng)論 1 31
  • 突然有點(diǎn)想寫文章的沖動(dòng),總想寫下一些東西,想法也好,經(jīng)歷也好,或者是自己當(dāng)下的生活狀況。就當(dāng)作是一次重新認(rèn)識(shí)自己吧...
    詞窮因?yàn)闆]墨水閱讀 207評(píng)論 0 0

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