資料結構二叉樹(c ,力扣刷題)

2021-10-09 19:37:09 字數 2508 閱讀 1380

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

暴力解法

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

int numleft = k;

vector<

int>

prel

(preorder.

begin()

+1, preorder.

begin()

+ k +1)

; vector<

int>

prer

(preorder.

begin()

+ k +

1, preorder.

end())

;//取一段區間重設二叉樹;

vector<

int>

inl(inorder.

begin()

, inorder.

begin()

+ k )

; vector<

int>

inr(inorder.

begin()

+ k +

1, inorder.

end())

; root-

>left =

buildtree

(prel, inl)

; root-

>right =

buildtree

(prer, inr)

;return root;}}

;

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

treenode*

create

(int prel,

int prer,

int inol,

int inor)

};

輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點(含根、葉節點)形成樹的一條路徑,最長路徑的長度為樹的深度。

思路

迭代法:設立乙個標籤值layer,每次layer加一意味著把上一層的節點值從佇列中清空;

遞迴法:直接求最長路徑,每次返回取左子樹和右子樹最大值加1;

class

solution

if(temp->right != null)

q.push(temp->right);

}layer++;

}return layer;

}*/// 迭**法:耗時久

intmaxdepth

(treenode* root)

//使用max函式

};

思路:遞迴,每次交換左子樹和右子樹位置

class

solution

void

reverse

(treenode*

&root)

reverse

(root-

>left)

;reverse

(root-

>right);}

};

二叉樹相關題目可以優先考驗遞迴

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。

你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。

思路:遞迴解決,重點是邊界條件的劃分:

a. 兩個數都為空,返回

b. 兩個樹節點都不為空,節點值相加給第一顆樹節點

c. 有一顆樹節點為空,返回(直接取不為空的另乙個樹節點位址)

class

solution

void

sum(treenode*

&t1, treenode* t2)

else

if(t1 ==

null

&& t2 !=

null

)else

if(t1 !=

null

&& t2 ==

null

)return

;sum

(t1-

>left, t2-

>left)

;sum

(t1-

>right, t2-

>right);}

};

二叉樹 力扣刷題

把二叉樹上的每乙個節點的左右子節點進行交換 definition for a binary tree node.public class treenode class solution 給定乙個 完美二叉樹 其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node ...

力扣刷題 合併二叉樹

題目描述 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。算是第一次正式用力扣刷題,思路上是有想法的,但回...

刷題39 二叉樹的直徑 力扣)

題目鏈結題目描述 給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。示例 給定二叉樹1 2 3 4 5返回 3,它的長度是路徑 4,2,1,3 或者 5,2,1,3 注意 兩結點之間的路徑長度是以它們之間邊的數目表示。關鍵技術 df...