114 二叉樹展開為鍊錶

2021-10-08 18:45:05 字數 2016 閱讀 1904

給定乙個二叉樹,原地將它展開為乙個單鏈表。

仔細看題解可以知道,先序遍歷的順序就是鍊錶的元素順序,直接先序遍歷,用乙個陣列儲存先序遍歷結果。

遞迴版

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

}void

dfs(treenode* root, vector>

& l)}}

;

迭代版

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

}for

(int i =

1; i < l.

size()

; i++)}

};

利用遞迴先序遍歷,棧可以保持右子節點資訊,直接遍歷原地轉換。

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

if(tmp !=

nullptr)if

(tmp -

> left !=

nullptr)}

pre = tmp;}}

};

對於當前節點,如果其左子節點不為空,則在其左子樹中找到最右邊的節點,作為前驅節點,將當前節點的右子節點賦給前驅節點的右子節點,然後將當前節點的左子節點賦給當前節點的右子節點,並將當前節點的左子節點設為空。對當前節點處理結束後,繼續處理鍊錶中的下乙個節點,直到所有節點都處理結束。

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

pre -

> right = cur -

> right;

cur -

> left =

nullptr

; cur -

> right = next;

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