public static bool isSymmetricTree(Node root) { if (root == null) return true; return isSymmetricTreeCore(root, root); }
static void Main(string[] args) { Node root = new Node(6); root.left = new Node(8); root.right = new Node(8); root.left.left = new Node(9); root.left.right = new Node(10); root.right.left = new Node(10); root.right.right = new Node(7); bool result = isSymmetricTree(root); }
/* * 1. empty node tree is symmetric * 2. Base case: if the binary tree has 3 nodes, left child value should be equal to right child value * 3. If the tree order level is more than 2, the left child of left child should be equal to right child of right child; * the right child of left child should be equal to left child of right child * 4. Recursively do the same thing * 5. Check the code redundancy, and make sure that no redudant code; check the code logic */ public static bool isSymmetricTreeCore(Node lNode, Node rNode) { if (lNode == null && rNode == null) return true; // empty tree is symmetric if (lNode == null || rNode == null) return false; // base case, 3 nodes in the tree if (lNode.data != rNode.data) return false; return isSymmetricTreeCore(lNode.left, rNode.right) && isSymmetricTreeCore(lNode.right, rNode.left); }