公眾平臺(tái)注冊(cè)網(wǎng)站怎么優(yōu)化搜索
題目
給你二叉樹的根結(jié)點(diǎn)?root
?,請(qǐng)你將它展開為一個(gè)單鏈表:
- 展開后的單鏈表應(yīng)該同樣使用?
TreeNode
?,其中?right
?子指針指向鏈表中下一個(gè)結(jié)點(diǎn),而左子指針始終為?null
?。 - 展開后的單鏈表應(yīng)該與二叉樹?先序遍歷?順序相同。
示例 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]
提示:
- 樹中結(jié)點(diǎn)數(shù)在范圍?
[0, 2000]
?內(nèi) -100 <= Node.val <= 100
?
解答
源代碼
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public void flatten(TreeNode root) {List<TreeNode> list = new ArrayList<TreeNode>();dfs(root, list);for (int i = 1; i < list.size(); i++) {TreeNode pre = list.get(i - 1), cur = list.get(i);pre.left = null;pre.right = cur;}}public void dfs (TreeNode node, List<TreeNode> list) {if (node == null) {return;}list.add(node);dfs(node.left, list);dfs(node.right, list);}
}
總結(jié)
這題我想了半天怎么直接將root根節(jié)點(diǎn)對(duì)應(yīng)的二叉樹展開成鏈表,這樣就不用返回值了。沒想到看了題解根本沒這么復(fù)雜,直接前序遍歷這個(gè)二叉樹,將每個(gè)節(jié)點(diǎn)地址存入列表,再把節(jié)點(diǎn)連接起來。