今日份算法 — 100. 相同的樹 101. 對稱二叉樹

更多算法實現見:https://github.com/Erindcl/Daily-algorithm

 

100. 相同的樹        

  • 給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。
  • 如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。

代碼如下:

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} p
 * @param {TreeNode} q
 * @return {boolean}
 */
var isSameTree = function(p, q) {
    if (!p && !q) {
        return true;
    }
    if (!p || !q) {
        return false;
    } 
    return p.val == q.val && isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
};

101. 對稱二叉樹        

  • 給定一個二叉樹,檢查它是否是鏡像對稱的。

分析:基於相同的樹的算法,比較根節點的左右子樹是否對稱相等。代碼如下:

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isSymmetric = function(root) {
    if (!root) {
        return true;
    }
    function compare (p,q) {
        if (!p && !q) {
            return true;
        }
        if (!p || !q) {
            return false;
        } 
        return p.val == q.val && compare(p.left,q.right) && compare(p.right,q.left);
    }
    return compare(root.left,root.right);
};

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章