zoukankan      html  css  js  c++  java
  • 创建二叉树,C语言实现

    一、前序遍历创建二叉树,使用递归,头文件 BiTree.h

    /*槽点一:创建树时用scanf输入不成功*/
    
    #ifndef BITREE_H
    #define BITREE_H
    
    #include<stdio.h>
    #include<stdlib.h>
    
    typedef char ElementType;
    typedef struct treenode
    {
        ElementType data;
        struct treenode *leftchild;
        struct treenode *rightchild;
    } TreeNode;
    
    /*使用先序遍历创建二叉树*/
    TreeNode *create_bitree()
    {
        ElementType ch;
        TreeNode *T;
    
        scanf("%c",&ch);    //这样调用scanf时,树的结点一次全部输入,如果要一次一个的输入,在%c前加个空格
        if(ch!='#')
        {
            T=(TreeNode*)malloc(sizeof(TreeNode));
            T->data=ch;
            T->leftchild=create_bitree();
            T->rightchild=create_bitree();
        }
        else
        {
            T=NULL;
        }
        return T;
    }
    
    /*先序遍历*/
    void pre_order_traversal(TreeNode *T)
    {
        ElementType data;
        if(T!=NULL)
        {
            data=T->data;
            printf("%c ",data);
            pre_order_traversal(T->leftchild);
            pre_order_traversal(T->rightchild);
        }
    }
    
    #endif

    有两个地方需要注意:1、要将树的节点指针作为返回值返回,而不能向下面这样直接作为参数传入,因为作为参数传递时只是传递了T 的一个copy,后来调用malloc函数分配新的内存地址时,也是赋给了这个备份,也就是说最后T依然没有改变,碰到malloc和指针做参数都要注意这个问题;2、scanf函数的问题:scanf会读入回车符,当需要一个一个的输入字符时,可以在%c前面加个空格

    int create_bitree(TreeNode *T;)
    {
        ElementType ch;
    
        scanf("%c",&ch);    //这样调用scanf时,树的结点一次全部输入,如果要一次一个的输入,在%c前加个空格
        if(ch!='#')
        {
            T=(TreeNode*)malloc(sizeof(TreeNode));
            T->data=ch;
            create_bitree(T->leftchild);
            create_bitree(T->rightchild);
        }
        else
        {
            T=NULL;
        }
        return 1;
    }
  • 相关阅读:
    XPah学习
    .NET在后置代码中输入JS提示语句(背景不会变白)
    .Net 使用文件上传控件FileUpload上传图片
    OnClientClick和OnClick同时使用!
    OnClientClick的用法
    mysql获得自增字段下一个值
    jQuery插件之ajaxFileUpload
    委托、匿名方法、Lambda表达式的演进
    js实现页面传值
    Entity Framework 学习初级篇--基本操作:增加、更新、删除、事务(转)
  • 原文地址:https://www.cnblogs.com/xmkk/p/3301182.html
Copyright © 2011-2022 走看看