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;  
    }

    结果如图



  • 相关阅读:
    jQuery插件jTemplates(模板)
    js常用正则
    SQLServer笔记 //20111027
    神经网络感知器matlab实现
    求全排列(无重复字母)
    python 学习笔记(1、数据类型)
    WampServer 不能打开phpmyadmin 的解决办法
    求一个整形数组里子序列和最大的算法
    堆排序算法的实习(C++)
    归并排序
  • 原文地址:https://www.cnblogs.com/siahekai/p/11000794.html
Copyright © 2011-2022 走看看