• 创建二叉树,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;
    }
  • 相关阅读:
    webService基本概念、元素及简单编码实现
    云服务器、vps、虚拟主机的区别
    SOAP和WSDL的一些必要知识
    密码学基础
    oracle执行计划
    dubbo学习笔记:快速搭建
    dubbo和zookeeper的关系
    查看wifi密码
    自动保存图表
    自定义颜色
  • 原文地址:https://www.cnblogs.com/xmkk/p/3301182.html
Copyright © 2020-2023  润新知