当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 数据结构树结构,二叉树,二叉树操作,源代码,Tree Structure,Binary Tree,source code
帖子发表于 : 2008-07-06 9:45 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
代码:
//  Tree Structure | Binary Tree
//  linked storage form

//  Last Modified: 2008-06-16
//  Last Modified: 2008-07-05

#include <stdio.h>
#include <stdlib.h>


typedef struct node
{
  char data;
  struct node *left, *right;
} node, *tree;

void create(tree *t);
void preorder_traverse(tree t);
void inorder_traverse(tree t);
void postorder_traverse(tree t);
int get_depth(tree t);
void get_leaf(tree t);

int leaves = 0;


void create(tree *t)
{
  int key = getchar();
 
  if (key != '.')
  {
    *t = (tree)malloc(sizeof(node));
    if (*t == NULL)
      printf("\n overflow ");

    (*t)->data = key;
    create(&((*t)->left));
    create(&((*t)->right));
  }
  else
  {
    *t = NULL;
  }
}


void preorder_traverse(tree t)
{
  if (t)
  {
    printf("\n %c ", t->data);
    preorder_traverse(t->left);
    preorder_traverse(t->right);
  }
}


void inorder_traverse(tree t)
{
  if (t)
  {
    inorder_traverse(t->left);
    printf("\n %c ", t->data);
    inorder_traverse(t->right);
  }
}


void postorder_traverse(tree t)
{
  if (t)
  {
    postorder_traverse(t->left);
    postorder_traverse(t->right);
    printf("\n %c ", t->data);
  }
}


int get_depth(tree t)
{
   int hl, hr, depth;
   
   if (t != NULL)
   {
      hl = get_depth(t->left);
      hr = get_depth(t->right);
      depth = (hl > hr) ? hl : hr;
      return depth + 1;
   }
   else
   {
      return 0;
   }
}


void get_leaf(tree t)
{
   if (t)
   {
      if (!t->left && !t->right)
      {
         printf("\n leaf = %c ", t->data);
         leaves++;
      }
      get_leaf(t->left);
      get_leaf(t->right);
   }
}

int main()
{
  tree t;

  printf("\n");
  printf("\n      Create Tree ");
  printf("\n");
  printf("\n      1234567890");
  printf("\n      ");
  create(&t);
 
  printf("\n");
  printf("\n      Preorder Traverse Tree ");
  printf("\n");
  preorder_traverse(t);
 
  printf("\n");
  printf("\n      Inorder Traverse Tree ");
  printf("\n");
  inorder_traverse(t);
 
  printf("\n");
  printf("\n      Postorder Traverse Tree ");
  printf("\n");
  postorder_traverse(t);
 
 
  printf("\n");
  printf("\n      Depth: %d ", get_depth(t));
 
 
  printf("\n");
  printf("\n      Leaves of Tree ");
  get_leaf(t);
 
  printf("\n");
  printf("\n      Leaves: %d ", leaves);
 
 
  printf("\n");
 
  return 0;
}


_________________
http://lee.youxu.info/


最后由 flyinflash 编辑于 2008-07-06 15:23,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-07-06 9:47 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
比较上面与它的差异
http://forum.ubuntu.org.cn/viewtopic.ph ... highlight=


_________________
http://lee.youxu.info/


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-07-06 9:48 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
代码:
typedef struct node
{
  struct node *left;
  data datas;
  struct node *right;
} node, *tree;
...
void insert(tree t, char *msg);

void insert(tree t, char *msg)
{
...
}

int main(int argc, char** argv)
{
  tree t;
...
}


_________________
http://lee.youxu.info/


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-07-06 11:12 
头像

注册: 2007-10-20 11:30
帖子: 1132
送出感谢: 1
接收感谢: 0 次
好长.....


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-07-06 14:22 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
不就几行……

其它我想说,为什么3楼的写法在C++下编译没问题,但是在C下有问题


代码:
...
    (*t)->data = key;
    create(&((*t)->left));
    create(&((*t)->right));
...

上面 的
代码:
&((*t)
不好理解


_________________
http://lee.youxu.info/


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-07-06 18:08 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
flyinflash 写道:
不就几行……

其它我想说,为什么3楼的写法在C++下编译没问题,但是在C下有问题


代码:
...
    (*t)->data = key;
    create(&((*t)->left));
    create(&((*t)->right));
...

那个data是个什么类型?在哪里定义了?
flyinflash 写道:
上面 的
代码:
&((*t)
不好理解

t是指向tree的实例的指针,*t代表一个tree的实例,tree是指向一个struct node实例的指针。
(*t)->left是一个tree的实例,&((*t)->left)取这个tree实例的地址。


_________________
爱喝真猪奶茶的夜鸣猪


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译