public int MinTreeDepth(BinaryTreeNode tree) { if (tree == null) { return 0; } return 1 + Math.Min(MinTreeDepth(tree.Left), MinTreeDepth(tree.Right)); }
public void SeeIfATreeIsBalancedTree() { BinaryTreeNode tree1 = new BinaryTreeNode() { Left = new BinaryTreeNode() { Left = new BinaryTreeNode() }, }; Assert.IsFalse(IsBalancedTree(tree1)); BinaryTreeNode tree2 = new BinaryTreeNode() { Left = new BinaryTreeNode() { Left = new BinaryTreeNode() { Left = new BinaryTreeNode() } }, Right = new BinaryTreeNode(), }; Assert.IsFalse(IsBalancedTree(tree2)); BinaryTreeNode tree3 = new BinaryTreeNode() { Left = new BinaryTreeNode() { Left = new BinaryTreeNode() }, Right = new BinaryTreeNode() { Left = new BinaryTreeNode() }, }; Assert.IsTrue(IsBalancedTree(tree3)); }
public void TraverseTreeInDepthOrder() { BinaryTreeNode tree3 = new BinaryTreeNode(1) { Left = new BinaryTreeNode(2) { Left = new BinaryTreeNode(4), Right = new BinaryTreeNode(5) }, Right = new BinaryTreeNode(3) { Left = new BinaryTreeNode(6), Right = new BinaryTreeNode(7) }, }; // create a queue Queue<BinaryTreeNode> queue = new Queue<BinaryTreeNode>(); queue.Enqueue(tree3); while (queue.Count > 0) { var t = queue.Dequeue(); Console.WriteLine(t.Value); if (t.Left != null) { queue.Enqueue(t.Left); } if (t.Right != null) { queue.Enqueue(t.Right); } } }
public bool IsBalancedTree(BinaryTreeNode tree) { return MaxTreeDepth(tree) - MinTreeDepth(tree) <= 1; }