• 创建二叉树,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;
    }
  • 相关阅读:
    java.lang.NoSuchMethodError:antlr.collections.AST.getLine() I
    T7 java Web day01 标签HTML
    T6 s1 day19
    T5 s5 Day18
    T5 s4 Day 17
    T5 s3 day16
    T5 s2 Day 15
    T5 s1 day14
    T4 S03 day 12
    T4 S01 day1
  • 原文地址:https://www.cnblogs.com/xmkk/p/3301182.html
Copyright © 2020-2023  润新知