利用递归来求一棵树的高度,基本思想是:对于每一个非空节点,先求取其左子树的高度,然后求取其右子树的高度,最后取两子树中较高的一个加1作为以该节点为根的树的高度;对于空节点,直接返回0就可以了。求整棵树的高度只需将此思想运用到根节点上即可。
struct BST_Node
{
int m_value;
BST_Node* left_child;
BST_Node* rigth_child;
};
class BSTree
{
private:
int nodeCount;
BST_Node* root;
...//省略建树及其他操作的方法
int _GetHeight(BST_Node* node)
{
if(node == NULL)
return 0;
int leftHeight = _GetHeight(node->left_child);
int rightHeight = _GetHeight(node->rigth_child);
int GreaterHeight = leftHeight > rightHeight ? leftHeight : rightHeight;
return 1 + GreaterHeight;
}
public:
BSTree()
:nodeCount(0),root(NULL)
{
}
...//省略析构函数及其他操作树的方法
int GetHeight()
{
return _GetHeight(root);
}
};
//测试代码
int _tmain(int argc, _TCHAR* argv[])
{
int myarray[] = {10,6,15,4,8,1,17,14,5,13,7,11,9,12,16};
BSTree tree;
...//省略建树及先序遍历树的语句
int height = tree.GetHeight();
cout<<height<<endl;
return 0;
}
//结果截图
原文地址:http://blog.csdn.net/liao_jian/article/details/43600951