题意:给出一棵二叉搜索树的插入序列,要求该树最后两层的结点个数。
思路:在树结点中增加一个数据域layer,表示该结点所在的层次。另外,设置数组level[]和变量maxLevel,level[i]表示第i层的结点个数,maxLevel表示树的最大层次,在层序遍历时更新即可。
代码:
#include <cstdio> #include <queue> using namespace std; int level[1005]={0}; int maxLevel=0; struct Node{ int val; int layer; Node *lchild,*rchild; Node(int v):val(v),layer(1),lchild(NULL),rchild(NULL){} }; void insert(Node* &root,int val) { if(root==NULL) { root=new Node(val); return; } if(val<=root->val) insert(root->lchild,val);//根据题意,这里是<=,要仔细! else insert(root->rchild,val); } void levelOrderTraversal(Node* root) { queue<Node*> q; root->layer=1; q.push(root); while(!q.empty()){ Node* pNode=q.front(); q.pop(); level[pNode->layer]++; if(pNode->layer > maxLevel) maxLevel=pNode->layer; if(pNode->lchild){ pNode->lchild->layer=pNode->layer+1; q.push(pNode->lchild); } if(pNode->rchild){ pNode->rchild->layer=pNode->layer+1; q.push(pNode->rchild); } } } int main() { int n,v; scanf("%d",&n); Node* root=NULL; while(n--){ scanf("%d",&v); insert(root,v); } levelOrderTraversal(root); printf("%d + %d = %d",level[maxLevel],level[maxLevel-1],level[maxLevel-1]+level[maxLevel]); return 0; }
原文地址:https://www.cnblogs.com/kkmjy/p/9588280.html
时间: 2024-10-17 16:54:09