給定乙個二叉樹,檢查它是否是映象對稱的。
二叉樹 [1,2,2,3,4,4,3] 是對稱的。
1
/ \
22/ \ / \34
43
[1,2,2,null,3,null,3] 不是映象對稱的:
1
/ \
22\ \33
對稱的條件:
1、兩棵樹的根節點相同;
2、每棵樹的右子樹和另一棵樹的左子樹對稱;
迭代法:我們運用佇列這種資料結構,佇列中連續的兩個節點應該是相同的,他們的子樹互為映象,初始情況是佇列中包含的是 root 以及 root。該演算法的工作原理類似於 bfs,但存在一些關鍵差異。每次提取兩個結點並比較它們的值。然後,將兩個結點的左右子結點按相反的順序插入佇列中。當隊列為空時,或者我們檢測到樹不對稱(即從佇列中取出兩個不相等的連續結點)時,該演算法結束。
遞迴法:
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solutionif(
!t1 ||
!t2)
return t1-
>val==t2-
>val &&
isbalancetree
(t1-
>left,t2-
>right)
&&isbalancetree
(t1-
>right,t2-
>left);}
bool
issymmetric
(treenode* root)
};
迭代法:
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。這題還是蠻簡單的。對稱二叉樹 include using namespace std struct treenode bool issymmetrical treenode proot1,t...
對稱二叉樹
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。solution public class treenode 我們可以通過比較二叉樹的前序遍歷序列和對稱前序遍歷序列來判斷二叉樹是不是對稱的 public class solution bo...