在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

如下是实现创建二叉树和二叉树中序遍历的代码:

 #include <stdio.h>
#include <stdlib.h>
#include <memory.h> typedef struct _tree_node{
char data;
struct _tree_node * left;
struct _tree_node * right;
struct _tree_node * father;
}tree_node; void createTree(tree_node * root);
void inorderTraverseTree(tree_node * pRoot); int main()
{
tree_node root;
memset(&root, , sizeof(tree_node));
printf("Please create the tree: \n");
createTree(&root);
printf("The inorder traverse result is: \n");
inorderTraverseTree(&root);
return ;
} //inorder traversal
void inorderTraverseTree(tree_node * pRoot)
{
tree_node * pCur = pRoot;
if(pCur != NULL)
{
if(pCur->left != NULL)
{
inorderTraverseTree(pCur->left);
}
else
{
printf("%c ", pCur->data);
return;
}
printf("%c ", pCur->data); if(pCur->right != NULL)
{
inorderTraverseTree(pCur->right);
}
}
} //Create the binary tree
void createTree(tree_node * pRoot)
{
char ch = ;
tree_node * pCur = pRoot;
while((ch = getchar())!= 'e')
{
//printf("%c" , ch);
tree_node * pNewNode = (tree_node *)malloc(sizeof(tree_node));
pNewNode->left = NULL;
pNewNode->right = NULL;
pNewNode->father = NULL;
if(ch == 'L')
{
//printf("Input L\n");
pNewNode->data = getchar();
pNewNode->father = pCur;
pCur->left = pNewNode;
pCur = pNewNode;
}
else if(ch == 'R')
{
//printf("Input R\n");
pNewNode->data = getchar();
pNewNode->father = pCur;
pCur->right = pNewNode;
pCur = pNewNode;
}
else if(ch == 'B')
{
//printf("Input B\n");
free(pNewNode);
if(pCur->father != NULL)
pCur = pCur->father;
else
printf("It's the top\n");
}
}
}

构造这样一颗二叉树:

程序运行结果为:

二叉树中序遍历 (C语言实现)的更多相关文章

  1. 94 Binary Tree Inorder Traversal(二叉树中序遍历Medium)

    题目意思:二叉树中序遍历,结果存在vector<int>中 解题思路:迭代 迭代实现: /** * Definition for a binary tree node. * struct ...

  2. [leetcode]94. Binary Tree Inorder Traversal二叉树中序遍历

    Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...

  3. 10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]

    改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他 ...

  4. lintcode.67 二叉树中序遍历

    二叉树的中序遍历    描述 笔记 数据 评测 给出一棵二叉树,返回其中序遍历 您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3, ...

  5. LeetCode:94_Binary Tree Inorder Traversal | 二叉树中序遍历 | Medium

    题目:Binary Tree Inorder Traversal 二叉树的中序遍历,和前序.中序一样的处理方式,代码见下: struct TreeNode { int val; TreeNode* l ...

  6. [Leetcode] Binary tree inorder traversal二叉树中序遍历

    Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...

  7. leetCode 94.Binary Tree Inorder Traversal(二叉树中序遍历) 解题思路和方法

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

  8. 二叉树中序遍历,先序遍历,后序遍历(递归栈,非递归栈,Morris Traversal)

    例题 中序遍历94. Binary Tree Inorder Traversal 先序遍历144. Binary Tree Preorder Traversal 后序遍历145. Binary Tre ...

  9. 39.Binary Tree Inorder Traversal(二叉树中序遍历)

    Level:   Medium 题目描述: Given a binary tree, return the inorder traversal of its nodes' values. 思路分析: ...

随机推荐

  1. POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]

    题意:求矩形面积并 分析:使用线段树+扫描线...因为坐标是浮点数的,因此还需要离散化! 把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用col表示该区间有多少个下边,sum代表该区 ...

  2. Matlab计算机视觉/图像处理工具箱推荐

    Matlab计算机视觉/图像处理工具箱推荐 转载http://cvnote.info/matlab-cv-ip-toolbox/ 计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理 ...

  3. 自己做的网页页面导航浏览JS/JQuery

    需求: 当页面是由一个巨大的表格构成时,浏览器自动会出现纵向和横向滚动条,这时用户浏览页面会出现很蛋疼的感受,那就是恶心的横向滚动条! 为了减缓这种蛋疼的感觉,我尝试做了这个导航器(不知道如何称呼), ...

  4. UVa11419 SAM I AM(构造最小点覆盖)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27475 [思路] 二分图的最小点覆盖以及构造最小覆盖. 二分图的最 ...

  5. 常考的算法及Java知识总结

    算法 1 字符串模式匹配问题 2 排列组合问题 3 查找排序问题 数据结构 B树(B,B*,B+,红黑树)和二叉树的区别,MAP,hashmap, JAVA: 线程sleep,wait,wake(), ...

  6. JSTL和select标签的组合使用

    1.用于根据不同的值显示对应的内容,不能选择 <select name="grade"> <c:choose> <c:when test=" ...

  7. Hibernate四 批量处理

    Hibernate批量处理一 批量插入将很多条记录插入数据库时,Hibernate通常会采用以下做法:public void test() { for(int i=0;i<1000;i++){ ...

  8. 学习 opencv---(10)形态学图像处理(2):开运算,闭运算,形态学梯度,顶帽,黒帽合辑

    上篇文章中,我们重点了解了腐蚀和膨胀这两种最基本的形态学操作,而运用这两个基本操作,我们可以实现更高级的形态学变换. 所以,本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和 ...

  9. MyBatis架构图

    MyBatis架构 MyBatis依赖的jar不多,而且代码行数也没多少,其中使用了大量的设计模式,值得好好学习.下图是MyBatis的一张架构图,来自Java框架篇—Mybatis 入门. Myba ...

  10. Hibernate命名空间怎样实现?

    什么是命名查询?  Hibernate同意在映射文件里定义字符串形式的查询语句.这样的查询方式成为命名查询  使用命名查询有什么优点?  因为使用Hibernate的HQL经常须要在Java代码中写字 ...