我遇到了一个我试图解决的问题。该问题需要找到二叉树的一个方向的最大高度。例如。如果一个分支向左继续,那么高度继续增加,但如果分支然后向右移动,则高度将重置为1.
我在C#中提出了以下内容,我甚至不确定它是否正确。
有谁知道最佳解决方案?
class MaxHeightInOneDirection
{
public void Run()
{
Tree a = new Tree();
a.x= 20;
Tree b = new Tree();
b.x = 21;
Tree c = new Tree();
c.x = 12;
c.l = b;
c.r = a;
Tree d = new Tree();
d.x = 10;
d.l = c;
Tree e = new Tree();
e.x = 3;
Tree f = new Tree();
f.x = 5;
f.l = e;
f.r = d;
int maxHeight = GetHeight(f)[2];
}
public int[] GetHeight(Tree root)
{
if (root == null)
return new int[]{-1,-1, 0};
int[] leftResult = GetHeight(root.l);
int[] rightResult = GetHeight(root.r);
// Increase left on current left
leftResult[0]++;
// Set right result on current left to 0
leftResult[1] = 0;
// Set left result on current right to 0
rightResult[0] = 0;
// Increase right on current right
rightResult[1]++;
int leftMaxSoFar = leftResult[2];
int rightMaxSoFar = rightResult[2];
int maxValueSoFar = Math.Max(leftMaxSoFar, leftResult[0]);
maxValueSoFar = Math.Max(maxValueSoFar, rightResult[1]);
maxValueSoFar = Math.Max(maxValueSoFar, rightMaxSoFar);
return new int[] { leftResult[0], rightResult[1], maxValueSoFar };
}
}
答案 0 :(得分:0)
要查找树的高度,您只需使用此算法: - here
在c#中做了一些事情
int MaxDepth(Tree node)
{
if (node==NULL)
return 0;
else
{
int lDepth = maxDepth(node->left);
int rDepth = maxDepth(node->right);
/* use the larger one */
if (lDepth > rDepth)
return(lDepth+1);
else return(rDepth+1);
}
}