606 根據二叉樹建立字串

2021-09-12 16:39:28 字數 1553 閱讀 8844

你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。

空節點則用一對空括號 「()」 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。

示例 1:

輸入: 二叉樹: [1,2,3,4]

1/    \

2       3/4

輸出: 「1(2(4))(3)」;解釋: 原本將是「1(2(4)())(3())」,在你省略所有不必要的空括號對之後,它將是「1(2(4))(3)」。

示例 2:

輸入: 二叉樹: [1,2,3,null,4]

1/    \

2      3\4

輸出: 「1(2()(4))(3)」;解釋: 和第乙個示例相似,除了我們不能省略第乙個對括號來中斷輸入和輸出之間的一對一對映關係。

這裡我們使用遞迴的思路先建立乙個可以容納二叉樹資料的陣列,或使用動態開闢申請,因為使用前序遍歷,所以我們拿到根節點的時候就向返回空間裡預先寫入(,和根的val,當左子節點為空時寫入(),因為題目要求根節點不帶括號,所以我們將它單獨處理後再呼叫帶括號的遞迴函式;

參考**:

char

*array;

int treesize;

void

_tree2str

(struct treenode* t)

array[treesize++]=

'(';

int n=

sprintf

(array+treesize,

"%d"

,t->val)

;//返回列印個數,列印到array+treesize處

treesize +

=n;if

(t->left==

null

&&t->right!=

null

)else

_tree2str

(t->right)

; array[treesize++]=

')';

}char

*tree2str

(struct treenode* t)

array=

(char*)

malloc

(sizeof

(char)*

100*

10000);

treesize=0;

int n=

sprintf

(array+treesize,

"%d"

,t->val)

; treesize +

=n;if

(t->left==

null

&&t->right!=

null

)else

_tree2str

(t->right)

; array[treesize++]=

'\0'

;return array;

}

606 根據二叉樹建立字串

你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。空節點則用一對空括號 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。示例 1 輸入 二叉樹 1 2,3 4 1 23 4 輸出 1 2 4 3 解釋 原本將是 1 2 4 3 在你省略所有不必要的...

606 根據二叉樹建立字串

你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。空節點則用一對空括號 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。示例 1 輸入 二叉樹 1 2,3 4 1 23 4 輸出 1 2 4 3 解釋 原本將是 1 2 4 3 在你省略所有不必要的...

606 根據二叉樹建立字串

分析 1 如果當前節點有兩個孩子,那麼在兩個孩子的結果外都要加括號 2 如果沒有孩子,則不需要加括號 3 只有左孩子,只需要給左孩子的結果加上括號 def tree2str self,t treenode str if t none return l r if t.left is not none ...