/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * } */ public classSolution { Queue<TreeNode> Q = new Queue<TreeNode>(); private List<string>GetFloorString() { var floor = new List<string>(); var count = 0; while (Q.Count > 0) { var n =Q.Dequeue(); if (n.left != null) { floor.Add(n.left.val.ToString()); Q.Enqueue(n.left); count++; } else { floor.Add("x"); } if (n.right != null) { floor.Add(n.right.val.ToString()); Q.Enqueue(n.right); count++; } else { floor.Add("x"); } } returnfloor; } public boolIsSymmetric(TreeNode root) { if (root == null) { return true; } else { Q.Enqueue(root); var str =GetFloorString(); int index = 0;//起始索引 var xcount = 0; //len长度 for (int len = 2; index + len <= str.Count && len > 0; len = 2 * (len -xcount)) { xcount = 0; var l = new List<string>();//str.Substring(index, len); for (int i = index; i < index + len; i++) { l.Add(str[i]); } var halflen = len / 2; var l1 = new List<string>(); for (int i = 0; i < halflen; i++) { l1.Add(l[i]); } //var s2 = s.Substring(halflen, halflen); var l2 = new List<string>(); for (int i = halflen; i < halflen + halflen; i++) { l2.Add(l[i]); } l2.Reverse(); var s1 = ""; var s2 = ""; for (int i = 0; i < l1.Count; i++) { s1 +=l1[i]; } for (int i = 0; i < l2.Count; i++) { s2 +=l2[i]; } if (s1 !=s2) { return false; } foreach (var c inl) { if (c == "x") { xcount++; } } index = index +len; } return true; } } }
https://leetcode.com/problems/symmetric-tree/#/description
补充一个python的实现:
1 classSolution: 2 def isSymmetric(self, root: 'TreeNode') -> 'bool': 3 if root ==None: 4 returnTrue 5 returnself.isSymmetric2(root.left,root.right) 6 7 def isSymmetric2(self,left,right): 8 if left == None and right ==None: 9 returnTrue 10 if left == None or right ==None: 11 returnFalse 12 if left.val !=right.val: 13 returnFalse 14 return self.isSymmetric2(left.left,right.right) and self.isSymmetric2(left.right,right.left)