具体是:比如现在有一个字符数组:

char[] c1={'a','b','c','d','e','f'};
将这个数组中的元素当做节点,创建出一棵树,怎么实现?谢谢

解决方案 »

  1.   

    #include "stdafx.h"
    #include <malloc.h>//二叉树结构体
    struct BTNode
    {
     char data;
     BTNode *rchild;
     BTNode *lchild;
    };
    char PreNode[8] ={'A','B','D','F','E','G','H','C'};
    char MidNode[8] ={'D','F','B','G','E','H','A','C'};
    /*
     二叉树创建函数dCreateBranchTree3()<非递归算法>
     已知二叉树的前,中序遍历序列串,构造对应的二叉树
     <编程思想>:
      首先,在前序遍历序列中的首元素是二叉树的根节点,接着
     ,在中序遍历序列中找到此节点,那么在此节点以前的节点必为
     其左孩子节点,以后的必为其右孩子节点;
      然后,在中序遍历序列中,根节点的左子树和右子树再分别
     对应子树前序遍历序列的首字符确定子树的根节点,再由中序
     遍历序列中根节点的位置分别确定构成它们的左子树和右子树
     的节点;
      依次类推,确定二叉树的全部节点,构造出二叉树.
     参数描述:
      char *pre:  前序遍历序列
      char *mid:  中序遍历序列
      int n:   遍历序列中节点个数
     返回值:
      dCreateBranchTree3 = 新建二叉树的根节点指针
    */
    BTNode *dCreateBranchTree3(char *pre,char *mid,int n)
    {
     BTNode *p;
     char *t;
     int left;
     if(n<=0)
      return(NULL);
     p = (BTNode *)malloc(sizeof(BTNode));
     p->data = *pre;
     for(t=mid;t<mid+n;t++)
      if(*t==*pre) break;  /*在中序遍历序列中查找根节点*/
     left = t - mid;  /*左子树的节点个数*/
     p->lchild = dCreateBranchTree3(pre+1,mid,left);
     p->rchild = dCreateBranchTree3(pre+1+left,t+1,n-1-left);
     return(p);
    }
    int _tmain(int argc, _TCHAR* argv[])

     BTNode *pTree = dCreateBranchTree3(PreNode, MidNode, 8);
     _getch();
     return 0;
    }
      

  2.   

    用ztree吧 那个很好用 是jquery的