PHP函式及應用
阿新 • • 發佈:2021-01-28
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件
對稱二叉樹
題目描述
給定一個二叉樹,檢查它是否是映象對稱的。 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。
但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:
注意:題目來自leetcode
解題過程
解題思路
利用遞迴方法,遞迴呼叫自己,並且遞迴函式遞迴判斷對稱情況。
1、建立一個boolean返回值型別的recur遞迴函式,傳入的是左L、右R兩個節點;
2、判斷當前對稱:在recur函式中,如果L和R都為空,則暫時對稱,返回true;
4、遞迴呼叫recur,用邏輯與連線recur(L.left,R.right)和recur(R.left,L.right);
7、遞迴結束;
程式碼如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
return root == null? true:recur(root.left, root.right);
}
public boolean recur(TreeNode L, TreeNode R){
//左右節點都是空的情況下是對稱的,直接返回true
if(L == null & R == null){
return true;
}
//不對稱的3種情況
if(L == null || R == null || L.val != R.val){
return false;
}
//未能判斷出是否對稱,則繼續遞迴呼叫recur函式.此處由於是對稱關係,所以要用一個邏輯與連線兩個遞迴操作
return recur(L.left, R.right) && recur(L.right, R.left);
}
}
總結
暫時沒有總結,待續。。。