114 二叉樹展開為鍊錶

2021-10-21 05:55:34 字數 1273 閱讀 8731

二叉樹展開為鍊錶

給你二叉樹的根結點 root ,請你將它展開為乙個單鏈表:

展開後的單鏈表應該同樣使用 treenode ,其中 right 子指標指向鍊錶中下乙個結點,而左子指標始終為 null 。

展開後的單鏈表應該與二叉樹 先序遍歷 順序相同。

示例 1:

輸入:root = [1,2,5,3,4,null,6]

輸出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

輸入:root =

輸出:示例 3:

輸入:root = [0]

輸出:[0]

樹中結點數在範圍 [0, 2000] 內

-100 <= node.val <= 100

高階:你可以使用原地演算法(o(1) 額外空間)展開這棵樹嗎?

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/// 解法一、 遞迴,後序遍歷展平左右子樹

// class solution

// flatten(root.left);

// flatten(root.right);

// treenode right = root.right;

// root.right = root.left;

// root.left = null;

// treenode p = root;

// while (p.right != null)

// p.right = right;

// }

// }

// 解法二、 迭代實現,o(1)空間複雜度,最優解

class

solution

treenode cur = root;

// 一直往右看,只要節點有左孩子就左子樹移到右子樹

while

(cur != null)

p.right = right;

} cur = cur.right;}}

}

114 二叉樹展開為鍊錶

首先是原地演算法的定義 演算法原地工作的含義是指不需要任何額外的輔助,演算法所需要的輔助空間不隨著問題的規模而變化,是乙個確定的值。通過觀察示例可以知道,我們可以猜想,大方向是前序遍歷。第一種思路 dfs。設定乙個全域性的指標 這種做法有點脫離原地演算法,因為多開闢了乙個指標變數 核心思想是拿到乙個...

114 二叉樹展開為鍊錶

一開始寫的 114 二叉樹展開為鍊錶 definition for a binary tree node.class treenode def init self,x self.val x self.left none self.right none class solution def flatt...

114 二叉樹展開為鍊錶

給定乙個二叉樹,原地將它展開為鍊錶。例如,給定二叉樹 1 2 5 3 4 6將其展開為 1 2 3 4 5 6思路 從題目可以看出來要求先根遍歷。從根節點開始出發,先檢測其左子結點是否存在 1 找到左子結點最後面的右子節點 如果沒有,就是左子節點本身 2 將根節點和其右子節點斷開,把原右子節點連到原...