二叉树节点的个数

给定一棵二叉树,返回二叉树节点的个数。

1.迭代法

即为二叉树的遍历,每遍历一个节点,个数加一。

前序遍历求解本题的具体代码:

//使用前序遍历--根左右
int countNodes(TreeNode* root) {
	int count = 0;
	if (root == NULL) return 0;
	stack<TreeNode*> st;
	while(st!=0) {
		TreeNode* node = st.top();
		st.pop();
		count++;
		if (node->right) st.push(node->right);
		if (node->left) st.push(node->left);
	}
	return count;
}

此外,可使用中序遍历和后序遍历。

2.递归法

按照递归法的三步法:

(1)确定参数和返回值:参数就是传入数的根结点,返回树节点的个数;

(2)确定终止条件:如果为空节点,返回0;

(3)单层递归的逻辑:求左子树的节点数量以及右子树的节点数量,取总和再加1为目前节点为根节点的节点数量。

实现代码如下:

//Solution2--递归法
int getNodesNum(TreeNode* cur) {
	if(cur == NULL) return 0;
	int leftNum = getNum(cur->left);
	int rightNum = getNum(cur->right);
	int treeNum = leftNum + rightNum + 1;
	return treeNum;
}

int countNodes(TreeNode* root) {
	return getNodesNum(root);
}
上一篇:Leetcode 739. 每日温度 单调栈


下一篇:[iOS]Objective-C基础回顾:继承和委托