② 按照层次进行访问
/** * 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: vector<vector<int>> levelOrder(TreeNode* root) { //二维数组ret用存放结果 vector <vector <int>> ret; //判断是否为空树 if (!root) return ret; //定义一个队列存放Treenode的指针 queue <TreeNode*> q; //将根元素压入队列 q.push(root); while (!q.empty()) { //当前层数 int currentLevelSize = q.size(); //先放入一个动态数组 ret.push_back(vector <int> ()); //进入循环 for (int i = 1; i <= currentLevelSize; ++i) { //auto类型得到队列中指针元素 auto node = q.front(); //出队 q.pop(); //ret容器存入当前结果 //back()得到数组的最后一个单元的引用 ret.back().push_back(node->val); //队列中加入上一个结点的左右孩子 if (node->left) q.push(node->left); if (node->right) q.push(node->right); } } return ret; } }; 统计叶子结点个数 //统计叶子结点数 int n2=0; void countLeafNode(BTNode *p) { if(p!=NULL) { if(p->lchild==NULL&&p->rchild==NULL)//判断是否叶子结点 ++n2; countLeafNode(p->lchild); countLeafNode(p->rchild); } } 计算二叉树的高度 int height(bbtnode* BT){ if(BT==NULL){ return 0; }else{ hl=height(BT->lchild); hr=height(BT->rchild); return max{hl,hr}+1 } } 交换二叉树左右子树 void exchange(bbtnode* BT){ if(BT){ temp=BT->lchild; BT->lchild=BT->rchild; BT->rchild=temp; exchange(BT->lchild); exchange(BT->rchild); } }