1. 程式人生 > >求二叉樹葉子節點的個數 && 求第K層的節點個數

求二叉樹葉子節點的個數 && 求第K層的節點個數

求二叉樹葉子節點的個數

思路:

1.如果根節點為NULL時,則是空樹,返回0;

2.根節點不為空時,如果根節點的左右子樹均為空,則該二叉樹中只有一個節點,即返回1;

3.葉子節點的個數=左子樹葉子節點數+右子樹葉子節點數;

int _GetNodeyezi(Node* root)   //葉子節點的個數
	{
		if (root == NULL)
		{
			return 0;
		}
		if ((root->_left == NULL) && (root->_right == NULL))
		{
			return 1;
		}
		return _GetNodeyezi(root->_left) + _GetNodeyezi(root->_right);    //左子樹葉子節點+右子樹葉子節點
	}

求第K層的節點個數

思路:

1.根節點為空或者K<=0時,返回0;

2.根節點不為空時,K==1時,返回1個,第一層最多隻有一個節點;

3.第K層節點數: 找到第K層,遞迴得到該層節點數;每次K-1,直到第K層時,K剛好為0,即遞迴結束

int _GetNodeK(Node* root, size_t k)    //第K層節點個數
	{
		if (root == NULL || k <= 0)
		{
			return 0;
		}
		if (root != NULL && k == 1)
		{
			return 1;
		}
		return _GetNodeK(root->_left, k - 1) + _GetNodeK(root->_right, k - 1);
	}