当前位置:编程学习 > C/C++ >>

输出所有根节点到叶子节点的长度(以二叉排序树为例)

[cpp]
#include <iostream>  
#include <stack>  
using namespace std; 
//节点  
struct node 

    node *lchild,*rchild; 
    int value; 
}; 
 
//二元查找树  
class list 

public: 
    list(); 
    //这里的m_print函数用做递归,print函数相当于外面的一个套子  
    void print(); 
private: 
    //将递归函数私有化  
    void m_print(node *p,int value); 
private: 
    node* root; 
}; 
void list::m_print(node *p,int value) 

    //如果p为空,返回  
    if(p==NULL) 
        return; 
    //线路和相加  
    value+=p->value; 
     
    //到叶子节点返回  
    if(NULL==p->lchild && NULL==p->rchild){ 
          cout<<value<<endl; 
          return; 
    } 
    //向左右方向递归  
    m_print(p->lchild,value); 
    m_print(p->rchild,value); 
 

 
 
void list::print() 

    m_print(root,0); 

 
list::list() 

    cout<<"请输入您要输入的节点,按'#'退出:"<<endl; 
    int i; 
    //用cin.fail(),cin.bad()判断也行  
    if(cin>>i==NULL){ 
      cout<<"您的输入有误"<<endl; 
      exit(-1); 
    } 
    //创建根节点  
    root=new node; 
    root->value=i; 
    root->lchild=NULL; 
    root->rchild=NULL; 
    //建立两个临时节点,p开辟新节点,q为二元查找定位  
    node *p,*q; 
    while(cin>>i!=NULL){ 
        //开辟新节点  
        p=new node; 
        p->value=i; 
        p->lchild=NULL; 
        p->rchild=NULL; 
        //二元查找树比较从q=root开始,小则转左,大则转右,如果有位置就插入  
        q=root; 
        while(1){ 
            //插入节点小于该节点比较值,左节点为空则插入,否则q=q->lchild继续判断  
            if(p->value<q->value){ 
                if(q->lchild) 
                    q=q->lchild; 
                else{ 
                    q->lchild=p; 
                    break; 
                } 
            } 
            //插入节点大于该节点比较值,右节点为空则插入,否则q=q->rchild继续判断  
            else if(p->value>q->value){ 
                if(q->rchild) 
                    q=q->rchild; 
                else{ 
                    q->rchild=p; 
                    break; 
                } 
            } 
            //如果两节点相等,直接退出程序(有些暴力)  
            else{ 
                cout<<"node repeated!!"<<endl; 
                exit(-1); 
            } 
        } 
    } 

 
void main() 

    list test; 
    //这里的print函数打印出所有的根节点到所有叶子节点的长度  
    test.print();    
    system("pause"); 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,