《劍指offer》 59 對稱的二叉樹

2022-03-17 09:50:02 字數 842 閱讀 1649

題目;請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一顆二叉樹和它的映象一樣,那麼它是對稱的。

例如,下面二棵樹圖(1)就是對稱的二叉樹,而圖(2)(3)就不是的。

分析:我們知道樹的遍歷有三種方式:前,中,後。顧名思義,對稱就是左邊的和右邊的相等,中間的自己等於自己。所以我們自己可以定義一種對稱遍歷演算法,例如前序遍歷中的前,左,右。對稱演算法就是:前,右,左。剛好對稱比較。當然了其他的中和後序遍歷也行,我們也可以定義與其對應的對稱演算法。但是其中為了避免出現樹(3)中的遍歷出來的資料一樣,造成誤判,我們需要對葉子結點加上標識,如空節點需要設定為null。而不能只是比較遍歷後的資料。

具體是實現**如下:

#include

using namespace std;

struct binarytree

;binarytree *proot1=null;

binarytree *proot2=null;

binarytree *proot3=null;

void createtree(binarytree * &root)

}bool issymmetricalhelp(binarytree *root1,binarytree *root2)

bool issymmetrical(binarytree *root)

void preorder(binarytree *root)

}void untipreorder(binarytree *root)

}int main()

{ bool result=false;

createtree(proot1);

cout<

執行結果如下;

劍指offer59題(對稱的二叉樹)

題目 請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。思路 根據前序遍歷 根 左 右 和對稱的前序遍歷 根 右 左 即可判斷。只要左子樹的左結點和右子樹的右結點,左子樹的右節點和右子樹的左結點相等,就是對稱的。public class t...

劍指offer59 判斷二叉樹是否對稱

請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。思路 首先根節點以及其左右子樹,左子樹的左子樹和右子樹的右子樹相同左子樹的右子樹和右子樹的左子樹相同即可,採用遞迴 public class treenode public class so...

劍指offer 面試題59 對稱的二叉樹

題目 請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。思路 如果乙個樹是對稱的,那麼它的前序遍歷和它的前序遍歷的對稱遍歷是一致的。所謂前序遍歷的對稱遍歷,即遵循根結點 右子結點 左子結點的遍歷順序,如果樹是對稱的,那麼兩種結果應該完全一樣。實際上不按書上...