二叉树节点数和深度的计算

先来计算二叉树节点的个数,首先我们可以根据先序遍历或者中序遍历或者后序遍历的次数,使用一个计数器对节点的个数进行计数操作。这里使用的是先序非递归遍历来实现:

int PreOrder(BtNode* ptr)
{
     
	int sum = 0;
	if (ptr == NULL)
	{
     
		return 0;
	}
	stack<BtNode *> st;
	st.push(ptr);
	while (!st.empty())
	{
     
		ptr = st.top();
		st.pop();
		sum++;
		if (ptr->rightchild != NULL)
		{
     
			st.push(ptr->rightchild);
		}
		if (ptr->leftchild != NULL)
		{
     
			st.push(ptr->leftchild);
		}
	}
	return sum;
	cout << endl;
}

还可以用递归计算根节点的左右子树节点的个数,然后再加一就是整个二叉树的节点个数。代码如下:

int SumTree(BtNode* ptr)
{
     
	if (ptr == NULL) return 0;
	else return SumTree(ptr->leftchild) + SumTree(ptr->rightchild) + 1;
}

从运行结果可以看到两种方法计算出的节点个数都为8.

二叉树节点数和深度的计算_第1张图片

同样的我们可以利用递归方法计算二叉树的深度:

int GetDepth(BtNode* ptr)
{
     
	if (ptr == NULL) return 0;
	else return std::max(GetDepth(ptr->leftchild), GetDepth(ptr->rightchild)) + 1;
}

非递归的计算方法我们可以借助《二叉树的层次遍历》中的“S”型遍历,使用计数器计算二叉树的深度,代码见《二叉树的层次遍历》。

你可能感兴趣的:(旺财的菜鸡篇)