给定一棵二叉树,返回二叉树节点的个数。
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);
}