zoukankan      html  css  js  c++  java
  • 二叉树的建立和遍历

    网络上有关二叉树建立的代码比较多,但粗略试了下,多数运行还是有问题,故本文给出了基于嵌套括号表示法的二叉树创建代码,如下图二叉树,其括号表示法为

    A(B(E,F(J,K),G),C,D(H,I))


    当下面程序运行是 (g++ xxx.cpp(文件名) -o xxxx(可执行文件名)),输入A(B(D(F,G),),C(,E(H,)))则能够得到该树的先序遍历结果ABDFGCEH

    树如下:

                     A

                 B       C

             D                E

         F       G      H

    #include <iostream>  
    #include <stdio.h>
    #include <malloc.h>
    #define MAXSIZE 100
    //demo: A(B(D(F,G),),C(,E(H,)))
    using namespace std;  
    
    typedef struct Node{  
        char data;  
        struct Node * lchild,* rchild; // 左右孩子  
    } BitNode;  
    
    BitNode *CreatBiTree(char *Str)
    { 	 
    		BitNode *s[MAXSIZE],*p,*B=NULL;
     		int top=-1,i=0,t;
        char ch;  
    		ch=Str[0];
    
        while(ch != '')
    		{
    				switch(ch)
    				{
    				case '(':top++;s[top]=p;t=1;break;
    				case ')':top--;break;
    				case ',':t=2;break;
    				default: p=(BitNode *)malloc(sizeof(BitNode));
    							   p->data=ch;p->lchild=p->rchild=NULL;
    								 if(B==NULL) B=p;
    								 else
    										if(t==1) s[top]->lchild=p;
    										else if(t==2) s[top]->rchild=p; 
    				}
    				i++;ch=Str[i]; 
    		}
    		return B;  
    }  
    
    void PreOrderTraverse(BitNode* &T){ // 先序遍历二叉树  
        if(T){ // 当节点不为空时执行  
            cout << T->data;  
            PreOrderTraverse(T->lchild);  
            PreOrderTraverse(T->rchild);  
        }  
        else  
            cout <<" ";  
    }  
    
    int main()
    {
    		char Str[100],ch;
      
        cout << "括号表示法创建二叉树" << endl;  
        BitNode* T;  
    
    		gets(Str);
        T=CreatBiTree(Str);
    		cout << "二叉树前序遍历:" << endl;
    		PreOrderTraverse(T);
    		cout<<endl;
        return 1;  
    }

    结果如图



  • 相关阅读:
    设计模式——代理模式
    设计模式——建造者模式
    设计模式——模板方法
    springboot+mybatis项目自动生成
    【小坑】java下载excel文件
    设计模式——工厂方法模式 和 抽象工厂模式
    设计模式——单例模式
    容易忽略的递归当中的return
    Android 4.0以后正确的获取外部sd卡存储目录
    Android 串口设置校验位、速率、停止位等参数
  • 原文地址:https://www.cnblogs.com/siahekai/p/11000794.html
Copyright © 2011-2022 走看看