536 從字串生成二叉樹

2021-10-10 01:25:13 字數 1428 閱讀 6938

題目描述:

你需要從乙個包括括號和整數的字串構建一棵二叉樹。

輸入的字串代表一棵二叉樹。它包括整數和隨後的 0 ,1 或 2 對括號。整數代表根的值,一對括號內表示同樣結構的子樹。

若存在左子結點,則從左子結點開始構建。

示例:

輸入字串中只包含 『(』, 『)』, 『-』 和 『0』 ~ 『9』

空樹由 「」 而非"()"表示。

方法1:

主要思路:

(1)將字串分成三部分,根節點,左子樹,右子樹,然後對根節點建立根,對左右子樹進行遞迴建立樹;

/**

* 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

//找出根節點對應的數值

int index=0;

while

(indexsize()

&&s[index]

!='('

)//建立根節點

treenode* root=

newtreenode

(stoi

(s.substr(0

,index)))

;//若此時只有根節點,則直接返回即可

if(s.

size()

==index)

//找左右子樹的遞迴範圍

int left=

1+index;

int right=index;

int count=0;

//找出左子樹的範圍,以括號的成對出現為終止條件

while

(rightsize()

)else

if(s[right]

==')')if

(count==0)

++right;

}//對找出的左子樹進行遞迴

root-

>left=

str2tree

(s.substr

(left,right-left));

//判斷是否需要建立右子樹,若需要,則遞迴建立右子樹

if(s.

size()

>right+2)

//返回根節點

return root;}}

;

FBI字串 二叉樹

問題描述 bracket pair colorizer 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的 01 串s可以構造出一棵fbi樹t...

UVA 536 二叉樹還原

題意 一棵二叉樹由 abc.xyz來代表節點表示 現在,給予先序遍歷和中序遍歷,還原樹,輸出後序遍歷 sample input dbacegf abcdefg bcad cbad sample output acbfged cdab 思路 基本樹還原,邊還原邊輸出樹 wa 1 include inc...

根據二叉樹建立字串

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