題目的意圖很明顯,就是然你寫個程式看看是不是對稱的,對稱的條件很明顯:
//左子樹點值等於右子樹的值然後我們想一想什麼樣的樹被稱為映象對稱?leftchild->val == rightchild->val
是不是當乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。那麼問題是不是可以轉化成:兩個樹在什麼情況下互為映象?
很明顯當子樹相互對稱應該符合一下條件:
1、它們的兩個根結點具有相同的值。
2、每個樹的右子樹都與另乙個樹的左子樹映象對稱。
//;現在讓我來想想遞迴如何實現力扣給的結構體/**
* definition for a binary tree node.
* struct treenode ;
*/
1、遞迴就會有終止條件,那麼這個函式什麼時候表示遞迴結束呢?
當然是到達樹的這一分支的最大深度。那麼如何檢測遞迴到了樹的這一分支的最大深度,很顯然每一棵二叉樹,如果它不是根節點,那麼,當該節點的左右子樹都為空時,表示這樹的這一支就兜底了。
由於這是映象二叉樹的題而不是測深度,所以我們返回的條件有三種:
第一種,兩個節點都為空,返回 true;
第二種,兩個節點不都為空 ,返回 false;
第三種,兩個節點的值不相等,返回 false;
得出了終止條件遞迴就基本成型了,就剩下迭代了,迭代這個較為簡單,不在這裡贅述了。
貼**:
bool checkval(struct treenode* leftchild, struct treenode*rightchild)迭代就不做細說了,這個實現起來太簡單了,bfs略微改改就行了if (null == leftchild || null ==rightchild)
return (leftchild->val == rightchild->val) && checkval(leftchild->left, rightchild->right) && checkval(leftchild->right, rightchild->left);
}bool issymmetric(struct treenode*root)
return checkval(root->left, root->right);
}
/*好吧,我這個更像棧一點。* * definition for a binary tree node.
* struct treenode ; */
#define maxsize 1024
bool issymmetric(struct treenode*root)
if ((null == leftchild || null == rightchild) || (leftchild->val != rightchild->val))
queue[index++] = leftchild->left;
queue[index++] = rightchild->right;
queue[index++] = leftchild->right;
queue[index++] = rightchild->left;
}return
true
;}
演算法不易,諸君共勉!
leetcode(資料結構) 映象二叉樹
題目的意圖很明顯,就是然你寫個程式看看是不是對稱的,對稱的條件很明顯 左子樹點值等於右子樹的值 leftchild val rightchild val 然後我們想一想什麼樣的樹被稱為映象對稱?是不是當乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。那麼問題是不是可以轉化成 兩個樹在什麼情況下互...
leetcode 資料結構 二分查詢
參考要求o logn 時間複雜度一般考慮二分法。int mid left right 2 在left和right都比較大的時候,left right很有可能超過int型別能表示的最大值,即整型溢位。int mid left right left 2 在right很大 left是負數且很小的時候,ri...
資料結構 二
字串處理 strlen 用來計算字元的長度,並不包括結束字元 0 空字元長度為0 1 include 2 3 int strlen char string 4 10 int main 11 strcpy char str1,char str2 用來拷貝字串,把str2每個字元都拷貝到str1中,直到...