public override void Arange(int left, int top) { var combinedWidth = CombinedWidth; if (Width == combinedWidth) { // Node is wider than child sub-trees LeftPosition = left; TopPosition = top; var leftCombinedWidth = LeftChild.CombinedWidth; var rightCombinedWidth = RightChild.CombinedWidth; var leftPad = (combinedWidth - leftCombinedWidth - Settings.ChildPadding - rightCombinedWidth) / 2; LeftChild.Arange(left + leftPad, top + 2); RightChild.Arange(left + leftPad + leftCombinedWidth + Settings.ChildPadding, top + 2); } else { LeftChild.Arange(left, top + 2); RightChild.Arange(left + LeftChild.CombinedWidth + Settings.ChildPadding, top + 2); var childrenWidth = (RightChild.RightPosition - LeftChild.LeftPosition); LeftPosition = LeftChild.LeftPosition + childrenWidth / 2 - Width / 2; TopPosition = top; } }