对于让你求二叉树节点个数的题目,无非就是普通二叉树、完全二叉树、满二叉树三种。这三者的关系是,二叉树>完全二叉树>满二叉树。
如果是题目没有给限定条件,只让你求二叉树的节点个数,则按照普通二叉树来求;如果给了限定条件,完全二叉树或者满二叉树,则根据他们的特性有更优化的算法。
一、求普通二叉树的节点个数
递归算法和迭代算法:
@H_502_24@/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x),left(NULL),right(NULL) {} * }; */ class Solution { public: int countNodes(TreeNode* root) { //用递归的方式,用递归真的太简单了 if(root == NULL) return 0; return 1+countNodes(root->left)+countNodes(root->right);属于后序遍历,先求了子树的,然后加上了中间的根节点 还可以采用层序遍历的方式,稍微改动模板,其实前序后序中序遍历感觉都行 if(root == NULL) return 0; queue<TreeNode*> que; que.push(root); int result = ; while(!que.empty()) { int size = que.size(); for(int i=0; i<size; i++) { TreeNode* node = que.front(); que.pop(); if(node->left) que.push(node->left); right) que.push(node->right); result++; } } return result; } };