
package mainimport "fmt"type TreeNode struct { Val int Left *TreeNode Right *TreeNode}func isSymmetric(root *TreeNode) bool { return isMirror(root.Left,root.Right)}func isMirror(t1 *TreeNode,t2 *TreeNode) bool{ if t1==nil&&t2==nil { return true } if t1==nil||t2==nil{ return false } return (t1.Val == t2.Val)&&isMirror(t1.Left,t2.Right)&&isMirror(t1.Right,t2.Left)}func isSymmetric1(root *TreeNode) bool { if root == nil { return true // []认为是true } queue := make([]*TreeNode,0) queue = append(queue,root.Left) queue = append(queue,root.Right) for len(queue)>=2{ left := queue[0] right := queue[1] queue = queue[2:]//出栈操作 if left==nil&&right==nil { continue } if left==nil||right==nil{ return false } if left.Val != right.Val { return false } queue = append(queue,left.Left) queue = append(queue,right.Right) queue = append(queue,left.Right) queue = append(queue,right.Left) } return true}func main() { a := &TreeNode{ Val: 1, } b := &TreeNode{ Val: 2, } a.Left = b c := &TreeNode{ Val: 2, } a.Right = c d := &TreeNode{ Val: 3, } b.Left = d e := &TreeNode{ Val: 4, } b.Right = e f := &TreeNode{ Val: 4, } c.Left = f g := &TreeNode{ Val: 3, } c.Right = g // 4,2,5,1,6,3 fmt.Println(isSymmetric1(a))}
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } // 递归调用判断左右子树 return isSameTree(root.left, root.right); } private boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p == null || q == null) { return false; } if (p.val != q.val) { return false; } // 判断左右子树的左边是否等于右边 return isSameTree(p.left, q.right) && isSameTree(p.right, q.left); }}