剑指 Offer 28. 对称的二叉树
题目链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/
本文采用JavaScript进行解题:一、递归
一、递归
这题的递归解答与树的子结构中的递归解答很类似;参考大神jyd的解题思路。
解题中很重要的是,精确找出相关结构的特性(当且仅当的性质:有此特性为此结构,此结构的具有此特性)
然后就是根据特性规律,考虑采用手段进行解题。
解题思路:
对称二叉树定义: 对于树中 任意两个对称节点 L和 R ,一定有:
- L.val = R.valL.val=R.val :即此两对称节点值相等。
- L.left.val = R.right.val :即 L 的 左子节点 和 R 的 右子节点 对称;
- L.right.val = R.left.val :即 L 的 右子节点 和R 的 左子节点 对称。
根据以上规律,考虑从顶至底递归,判断每对节点是否对称,从而判断树是否为对称二叉树。

1 /** 2 * @param {TreeNode} root 3 * @return {boolean} 4 * 特殊处理:root == null: 对称 5 */ 6 var isSymmetric = function (root) { 7 if(root == null) return true; 8 return recur(root.left, root.right); 9 }; 10 /** 11 * 当左右子树同时遍历超过叶子:对称 12 * 左右子树非同时遍历超过叶子:非对称 13 */ 14 let recur = function(aNode, bNode) { 15 if(aNode == null && bNode == null) return true; 16 if(aNode == null || bNode == null) return false; 17 if(aNode.val != bNode.val) return false; 18 return recur(aNode.left, bNode.right) && recur(aNode.right, bNode.left); 19 }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号