在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(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语言实现)的更多相关文章
-
94 Binary Tree Inorder Traversal(二叉树中序遍历Medium)
题目意思:二叉树中序遍历,结果存在vector<int>中 解题思路:迭代 迭代实现: /** * Definition for a binary tree node. * struct ...
-
[leetcode]94. Binary Tree Inorder Traversal二叉树中序遍历
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
-
10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]
改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他 ...
-
lintcode.67 二叉树中序遍历
二叉树的中序遍历 描述 笔记 数据 评测 给出一棵二叉树,返回其中序遍历 您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3, ...
-
LeetCode:94_Binary Tree Inorder Traversal | 二叉树中序遍历 | Medium
题目:Binary Tree Inorder Traversal 二叉树的中序遍历,和前序.中序一样的处理方式,代码见下: struct TreeNode { int val; TreeNode* l ...
-
[Leetcode] Binary tree inorder traversal二叉树中序遍历
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
-
leetCode 94.Binary Tree Inorder Traversal(二叉树中序遍历) 解题思路和方法
Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...
-
二叉树中序遍历,先序遍历,后序遍历(递归栈,非递归栈,Morris Traversal)
例题 中序遍历94. Binary Tree Inorder Traversal 先序遍历144. Binary Tree Preorder Traversal 后序遍历145. Binary Tre ...
-
39.Binary Tree Inorder Traversal(二叉树中序遍历)
Level: Medium 题目描述: Given a binary tree, return the inorder traversal of its nodes' values. 思路分析: ...
随机推荐
-
js封装的三级联动菜单(使用时只需要一行js代码)
前言 在实际的项目开发中,我们经常需要三级联动,比如省市区的选择,商品的三级分类的选择等等. 而网上却找不到一个代码完整.功能强大.使用简单的三级联动菜单,大都只是简单的讲了一下实现思路. 下面就给大 ...
-
Excel with COM
COM excelApplication ; COM workBooks ; COM workSheets ; COM workSheet ; COM work ...
-
ASP.NET MVC中的Global.asax文件
1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...
-
一个基于DDD的开源项目,各种技术!
基于asp.net mvc + DDD 构架的开源.net cms系统. 运行截图: 特性: 跨平台 支持Windows.Linux.MacOX运行.linux运行案例:http://blog.ops ...
-
菜单工具栏wxPython菜单与工具栏基础示例
这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...
-
1.1 sikuli 安装
JRE7不支持sikuli,必须下载JRE6 更新号必须大于35 sikuli下载: http://www.cr173.com/soft/52775.html 或参照 http://www.cnb ...
-
hibernate中save()、update()、saveOrUpdate()的区别
save()方法很显然是执行保存操作的,如果是对一个新的刚new出来的对象进行保存,自然要使用这个方法了,数据库中没有这个对象. update()如果是对一个已经存在的托管对象进行更新那么肯定是要使用 ...
-
RunLoop总结:RunLoop的应用场景(三)
今天要讲的RunLoop的应用场景可能太简单了,所以东西比较少.因为跟UITableView.UICollectionView等的滑动优化有关,就顺便总结一下会影响UITableView.UIColl ...
-
高通平台MSM8916LCM模块移植(一)-bootloader部分
此次移植打算分成两个模块来说,bootloader部分和kernel部分.在实际的移植调试过程中也是这么分成了两个部分分别调试. 高通平台中的bootloader叫做LK(Little Kernel, ...
-
Perl IO:文件锁
文件锁 当多个进程或多个程序都想要修同一个文件的时候,如果不加控制,多进程或多程序将可能导致文件更新的丢失. 例如进程1和进程2都要写入数据到a.txt中,进程1获取到了文件句柄,进程2也获取到了文件 ...