建立二叉树,并层次遍历输出

    xiaoxiao2021-03-25  119

    测试数据输入:123##4##5##

            输出数据:12345

    #include<iostream> #include<deque> #include<list> using namespace std; struct Node{ Node *rchild; Node *lchild; char data; }; deque <Node*> Q; Node *create(Node *bt) //前序建立二叉树 { char c; cin >>c; if(c=='#') bt=NULL; else{ bt=new Node; bt->data=c; bt->lchild=create(bt->lchild); bt->rchild=create(bt->rchild); } return bt; } void leverOrder(Node *bt) //利用队列的性质不难理解 { if(bt!=NULL) Q.push_back(bt); while(Q.empty()==false) { Node *temp=Q.front(); cout <<temp->data; if(temp->lchild!=NULL) Q.push_back(temp->lchild); if(temp->rchild!=NULL) Q.push_back(temp->rchild); Q.pop_front(); } cout<<endl; } int main(){ Node *bt; bt=create(bt); leverOrder(bt); return 0; }

    求最大宽度:

    Q.push_back(bt); while(1) { int len=Q.size(); if(len>tmax) tmax=len if(len==0) break; while(len>0) { Node *temp=Q.front(); if(temp->lchild!=NULL) Q.push_back(temp->lchild); if(temp->rchild!=NULL) Q.push_back(temp->rchild); Q.pop_back; len-- } }

    转载请注明原文地址: https://ju.6miu.com/read-6275.html

    最新回复(0)