创建二叉树,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 ;
}
创建二叉树,C语言实现的更多相关文章
- 用c语言实现前序创建二叉树(递归),分别用前序,中序,后序遍历,以及分别输出节点个数和叶子节点个数
		
本人c语言小白一枚,近期在学习数据结构(c语言版),特写此随笔,做一些总结和分享,如有不当之处,请各位技术大牛斧正 首先我们用一个结构体来抽象树的结点,代码如下(这里我们存放的数据为char型,大家可 ...
 - 先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言
		
#include "stdio.h" #include "string.h" #include "malloc.h" #define NUL ...
 - 非递归创建二叉树( C++队列 )
		
非递归按照 层序 创建二叉树,利用 队列(即可先进先出特点)存放已访问的结点元素的地址. 初始化:front=rear= -1: 每储存一个结点元素 rear+1 ,利用 rear%2==0 来使 f ...
 - YTU 3025: 创建二叉树
		
原文链接:https://www.dreamwings.cn/ytu3025/2628.html 3025: 创建二叉树 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 3 ...
 - c/c++ 用前序和中序,或者中序和后序,创建二叉树
		
c/c++ 用前序和中序,或者中序和后序,创建二叉树 用前序和中序创建二叉树 //用没有结束标记的char*, clr为前序,lcr为中序来创建树 //前序的第一个字符一定是root节点,然后去中序字 ...
 - c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历
		
#include <iostream> #include <cstdio> #include <stdio.h> #include <string> # ...
 - java创建二叉树并实现非递归中序遍历二叉树
		
java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...
 - 递归------python实现列表创建二叉树
		
# -*- coding:utf-8 -*- '二叉树结点类' class TreeNode: def __init__(self, x): self.val = x self.left = None ...
 - c使用二叉链表创建二叉树遇到的一些疑问和思考
		
二叉链表存储二叉树 学习的时候参考的是<大话数据结构>,书中是这样定义的 typedef char TElemType; typedef struct BiTNode { TElemTyp ...
 
随机推荐
- codeforces edu round3
			
B. The Best Gift 传送门:http://codeforces.com/problemset/problem/609/B Emily's birthday is next week a ...
 - Oracle 分析函数 "ORA-30485: 在窗口说明中丢失 ORDER BY 表达式"
			
跟顺序有关的几个分析函数row_number.rank.dense_rank.lead和lag的over窗口里,都必须有order_by_clause.其他几个如:first_value.last_v ...
 - SDC(1)–Hold Time
			
从以下两个论点触发可能会使Hold Time的计算理解起来更加容易: (1) H = SU – 1 ; (2) Hold Check的目的是确保Source Clock在某个边沿打出数据时,该数据不会 ...
 - Spring中的一个错误:使用Resources时报错(The annotation @Resources is disallowed for this location)
			
在学习Spring的过程中遇到一个错误:在使用注解@resources的时候提示:The annotation @Resources is disallowed for this location 后 ...
 - Fiddler对安卓应用手机抓包图文教程
			
http://www.cr173.com/html/37625_1.html 做开发需要抓取手机app的http/https的数据包,想看APP发出的http请求和响应是什么,这就需要抓包了,这可以得 ...
 - easyui源码翻译1.32--Droppable(放置)
			
前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...
 - Java泛型反射机制(二)
			
/** * @author Administrator * 好处:泛型:1安全 2减少代码重用率 */ package com.test; import java.lang.reflect.Metho ...
 - RxJava开发精要4 – Observables过滤
			
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
 - 集合对象(NSSet)
			
main.m #import <Foundation/Foundation.h> @interface NSSet(printInteger) -(void)printSet; @end ...
 - 可否控制<link type=text/css rel=stylesheet href=style.css>
			
本篇文章主要介绍了"可否控制<link type=text/css rel=stylesheet href=style.css> ", 主要涉及到可否控制<lin ...