101.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. // // TreeNode ...
  3. // type TreeNode struct {
  4. // Val int
  5. // Left *TreeNode
  6. // Right *TreeNode
  7. // }
  8. func isSymmetricIter(lNode *TreeNode, rNode *TreeNode) bool {
  9. if lNode == nil || rNode == nil {
  10. return lNode == rNode
  11. }
  12. if lNode.Val != rNode.Val {
  13. return false
  14. }
  15. return isSymmetricIter(lNode.Left, rNode.Right) && isSymmetricIter(lNode.Right, rNode.Left)
  16. }
  17. /**
  18. * Definition for a binary tree node.
  19. * type TreeNode struct {
  20. * Val int
  21. * Left *TreeNode
  22. * Right *TreeNode
  23. * }
  24. */
  25. func isSymmetric(root *TreeNode) bool {
  26. if root == nil {
  27. return true
  28. }
  29. return isSymmetricIter(root.Left, root.Right)
  30. }
  31. // func main() {
  32. // /**
  33. // * t1: 5
  34. // * / \
  35. // * 1 4
  36. // * / \
  37. // * 2 3
  38. // */
  39. // t1l := TreeNode{1, nil, nil}
  40. // t1rl := TreeNode{2, nil, nil}
  41. // t1rr := TreeNode{3, nil, nil}
  42. // t1r := TreeNode{4, &t1rl, &t1rr}
  43. // t1 := &TreeNode{5, &t1l, &t1r}
  44. // /**
  45. // * t2: 1
  46. // * / \
  47. // * 2 2
  48. // * / \ / \
  49. // * 4 3 3 4
  50. // */
  51. // t2ll := TreeNode{4, nil, nil}
  52. // t2lr := TreeNode{3, nil, nil}
  53. // t2l := TreeNode{2, &t2ll, &t2lr}
  54. // t2rl := TreeNode{3, nil, nil}
  55. // t2rr := TreeNode{4, nil, nil}
  56. // t2r := TreeNode{2, &t2rl, &t2rr}
  57. // t2 := &TreeNode{1, &t2l, &t2r}
  58. // fmt.Println(isSymmetric(t1))
  59. // fmt.Println(isSymmetric(t2))
  60. // }