lettcode 從先序遍歷還原二叉樹

2021-10-05 15:17:04 字數 2310 閱讀 5361

我們從二叉樹的根節點 root 開始進行深度優先搜尋。

在遍歷中的每個節點處,我們輸出 d 條短劃線(其中 d 是該節點的深度),然後輸出該節點的值。(如果節點的深度為 d,則其直接子節點的深度為 d + 1。根節點的深度為 0)。

如果節點只有乙個子節點,那麼保證該子節點為左子節點。

給出遍歷輸出 s,還原樹並返回其根節點 root。

輸入:"1-2--3--4-5--6--7"

輸出:[1,2,5,3,4,6,7]

class

solution

for(

int w=numf.

size()

-1;w>=

0;w--

)/*********************計算數字*******************end******/

head-

>val=value;

bin(head,

0,flag)

;return head;

} vector<

int>

bin(treenode* tree,

int layer,

int index)

for(

;ilength()

;i++

) result.

push_back

(thislayer)

; result.

push_back

(i);

if(thislayer<=layer)

return result;

/*********************計算數字*************************/

vector<

int> nums;

int value=0;

while

(isize()

&&data[i]

!='-'

)for

(int w=nums.

size()

-1;w>=

0;w--

)/*********************計算數字**********************end***/

treenode * left=

new treenode;

left-

>val=value;

tree-

>left=left;

vector<

int> nextresult=

bin(tree-

>left,thislayer,i)

;//處理右節點

treenode * right=

new treenode;

if(nextresult[0]

==thislayer)

for(

int w=nums1.

size()

-1;w>=

0;w--

)/*********************計算數字***********************end**/

right-

>val=value1;

tree-

>right=right;

vector<

int> next=

bin(tree-

>right,thislayer,i1)

;return next;

}else

}private

: treenode* head;

string data;

};

需要考慮兩點:

(1)遍歷到葉子結點時要如何處理

(2)當前資料如何轉化為整型(因為是string型別,需要轉化為int),以及轉化後傳入下乙個結點時string字串中的位置

整體思路是沒到乙個結點就認定此點是根節點,然後遍歷』-'得到是否是當前深度的值,如果不是,就回溯到上一層,否則證明此點是左結點,然後再向下遍歷去尋找右節點。

如果到最後都沒有找到就會返回邊界點的result陣列向量,此時預設right為null,否則初始化node->right

邊界條件

(1)遍歷得到的 『-』 數量不位於當前層(小於或者等於上一層的層值資料——即遞迴函式傳入的layer引數)

(2)到達輸入字串的末尾

整體**編寫過程中遍歷字串將string轉化為int有些贅餘

Leetcode 1028 從先序遍歷還原二叉樹

1,題目 我們從二叉樹的根節點 root 開始進行深度優先搜尋。在遍歷中的每個節點處,我們輸出 d 條短劃線 其中 d 是該節點的深度 然後輸出該節點的值。如果節點的深度為 d,則其直接子節點的深度為 d 1。根節點的深度為 0 如果節點只有乙個子節點,那麼保證該子節點為左子節點。給出遍歷輸出 s,...

LeetCode 1028 從先序遍歷還原二叉樹

我們從二叉樹的根節點 root 開始進行深度優先搜尋。在遍歷中的每個節點處,我們輸出 d 條短劃線 其中 d 是該節點的深度 然後輸出該節點的值。如果節點的深度為 d,則其直接子節點的深度為 d 1。根節點的深度為 0 如果節點只有乙個子節點,那麼保證該子節點為左子節點。給出遍歷輸出 s,還原樹並返...

leetcode 1028 從先序遍歷還原二叉樹

public treenode recoverfrompreorder string s 再確定結點的值 先將值初始化為0 int value 0 while icharacter.isdigit s i 構造樹的結點 treenode node new treenode value 插入到正確位置...