對稱二叉樹c 對稱的二叉樹

2021-10-16 16:07:42 字數 1517 閱讀 7749

**很簡單,關鍵還是知道怎麼樣才能判斷乙個

二叉樹是否對稱,只要採用前序、中序、後序、層次遍歷等任何一種遍歷方法,分為先左後右和先

右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。

迭代版本

class solution {

public:

bool issymmetric(treenode* root) {

if(root==null) return true;

queue q1,q2;

treenode *left,*right;

q1.push(root->left);

q2.push(root->right);

while(!q1.empty() and !q2.empty())

left = q1.front();

q1.pop();

right = q2.front();

q2.pop();

//兩邊都是空

if(null==left && null==right)

continue;

//只有一邊是空

if(null==left||null==right)

return false;

if (left->val != right->val)

return false;

q1.push(left->left);

q1.push(left->right);

q2.push(right->right);

q2.push(right->left);

return true;

遞迴版本

struct treenode {

int val;

struct treenode *left;

struct treenode *right;

treenode(int x) :

val(x), left(null), right(null) {

思路:如果先序遍歷的順序分為兩種先左後右和先右後左兩種順序遍歷,如果兩者相等說明二叉樹是對稱的二叉樹

class solution {

public:

bool issymmetrical(treenode* proot)

return issymmetrical(proot,proot);

bool issymmetrical(treenode* proot1,treenode* proot2)

if(proot1==null&&proot2==null)

return true;

if(proot1==null || proot2==null)

return false;

if(proot1->val!=proot2->val)

return false;

return issymmetrical(proot1->left,proot2->right) && issymmetrical(proot1->right,proot2->left);

對稱二叉樹

請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。這題還是蠻簡單的。對稱二叉樹 include using namespace std struct treenode bool issymmetrical treenode proot1,t...

對稱二叉樹

請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。solution public class treenode 我們可以通過比較二叉樹的前序遍歷序列和對稱前序遍歷序列來判斷二叉樹是不是對稱的 public class solution bo...

對稱二叉樹

題目 請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和 它的映象一樣,那麼它是對稱的。bool issymmetrical binarytreenode proot1,binarytreenode proot2 bool issymmetrical binarytreenode pr...