剑指offer-58:对称的二叉树
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb?tpId=13&&tqId=11211&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题目:请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
示例1
输入:{8,6,6,5,7,7,5}
返回值:true
示例2
输入:{8,6,9,5,7,7,5}
返回值:false
思路:
1:实现一个判断结点是否相等的函数,且在内部进行递归,主函数直接放入左子树与右子树进行调用
2:判断是否相等的函数具有两个形参,p和q分别代表左节点和右节点,判断的条件有三个
3:p和q如果都为空,则返回true;p和q其中一个为空,则返回false;p和q的值不相等返回false。
4:进行递归,p的左和q的右进行递归,p的右和q的左进行递归
注意:第三点,三个判断条件的先后顺序也要小心。
function same(p,q){ if(!p && !q) return true if(!p || !q) return false if(p.val !== q.val) return false return same(p.left,q.right) && same(p.right,q.left) } function isSymmetrical(pRoot) { // write code here if(!pRoot) return true return same(pRoot.left,pRoot.right) }