114 二叉樹展開為鍊錶

2021-10-08 18:43:01 字數 1097 閱讀 6854

難度:中等

題目描述

解題思路

又是一道我看不懂答案的遞迴題

大概就是先後序遍歷,按照前序遍歷的順序,把左子樹放到右子樹,把本來的右子樹接上去,記得要置空左子樹

可以用遞迴和非遞迴

/*

* 114. 二叉樹展開為鍊錶

* 2020/8/2

*/public

void

flatten

(treenode root)

// 將左子樹展開為單鏈表

flatten

(root.left)

;// 將右子樹展開為單鏈表

flatten

(root.right)

;// 暫存右子樹,這個右子樹應該是最左邊節點的右子樹

treenode temp = root.right;

//左節點的值給右節點

root.right = root.left;

//左節點置空

root.left= null;

//然後把之前的右節點接到新右節點後面

while

(root.right != null)

root.right = temp;

}

非遞迴的思路也很像,就是用自己定義的棧來模擬系統棧遞迴的過程,把所有的左孩子入棧,然後每次出棧乙個左孩子,完成交換的過程。

public

void

flatten1

(treenode root)if(

!stack.

isempty())}}

以題目的樣例,出棧的順序是3 2 4 1 5 6

先把2 3 4變成符合要求的,然後接到根1上,把1的右子樹接到4後面,就成了123456

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 將根節點和其右子節點斷開,把原右子節點連到原...