359 字
2 分钟
Leetcode->对称二叉树
题目
给你一个二叉树的根节点 root
, 检查它是否轴对称。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree/
示例1
输入:root = [1,2,2,3,4,4,3] 输出:true
示例2
输入:root = [1,2,2,null,3,null,3] 输出:false
解题
:::tip 思路
此题要判断一个二叉树是否轴对称,那么首先,什么样的二叉树满足轴对称,有什么特点?
如果同时满足下面的条件,两个树互为镜像:
- 它们的两个根结点具有相同的值
- 每个树的右子树都与另一个树的左子树镜像对称
:::
解法一 递归
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function (root) {
if (!root) return true
const judge = function (l, r) {
if (!l && !r) return true
else if (!l && r || l && !r) return false
else if(l.val != r.val) return false
return judge(l.left, r.right) && judge(l.right, r.left)
}
return judge(root.left, root.right)
};
解法二 迭代
利用栈进行迭代
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
if(!root) return true;
let stack = []
stack.push(root.left)
stack.push(root.right)
while(stack.length) {
const LNode = stack.pop()
const RNode = stack.pop()
if(!LNode && !RNode)
continue
if(!LNode || !RNode || LNode.val != RNode.val ) {
return false
}
stack.push(LNode.left)
stack.push(RNode.right)
stack.push(LNode.right)
stack.push(RNode.left)
}
return true
};
Leetcode->对称二叉树
https://blog.oceanh.top/posts/algorithm/对称二叉树/