101.go 1.2 KB

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