二叉树中序遍历 (C语言实现)

时间:2020-12-08 10:04:29

在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(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语言实现)

程序运行结果为:

二叉树中序遍历 (C语言实现)

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

  1. 94 Binary Tree Inorder Traversal&lpar;二叉树中序遍历Medium&rpar;

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

  2. &lbrack;leetcode&rsqb;94&period; Binary Tree Inorder Traversal二叉树中序遍历

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

  3. 10&period;26最后的模拟DAY2 改造二叉树&lbrack;中序遍历&plus;严格递增的最长不下降子序列&rsqb;

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

  4. lintcode&period;67 二叉树中序遍历

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

  5. LeetCode:94&lowbar;Binary Tree Inorder Traversal &vert; 二叉树中序遍历 &vert; Medium

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

  6. &lbrack;Leetcode&rsqb; Binary tree inorder traversal二叉树中序遍历

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

  7. leetCode 94&period;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&period;Binary Tree Inorder Traversal(二叉树中序遍历)

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

随机推荐

  1. js封装的三级联动菜单&lpar;使用时只需要一行js代码&rpar;

    前言 在实际的项目开发中,我们经常需要三级联动,比如省市区的选择,商品的三级分类的选择等等. 而网上却找不到一个代码完整.功能强大.使用简单的三级联动菜单,大都只是简单的讲了一下实现思路. 下面就给大 ...

  2. Excel with COM

    COM     excelApplication ; COM     workBooks ; COM     workSheets ; COM     workSheet ; COM     work ...

  3. ASP&period;NET MVC中的Global&period;asax文件

    1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...

  4. 一个基于DDD的开源项目&comma;各种技术!

    基于asp.net mvc + DDD 构架的开源.net cms系统. 运行截图: 特性: 跨平台 支持Windows.Linux.MacOX运行.linux运行案例:http://blog.ops ...

  5. 菜单工具栏wxPython菜单与工具栏基础示例

    这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...

  6. 1&period;1 sikuli 安装

    JRE7不支持sikuli,必须下载JRE6   更新号必须大于35 sikuli下载: http://www.cr173.com/soft/52775.html 或参照 http://www.cnb ...

  7. hibernate中save()、update()、saveOrUpdate()的区别

    save()方法很显然是执行保存操作的,如果是对一个新的刚new出来的对象进行保存,自然要使用这个方法了,数据库中没有这个对象. update()如果是对一个已经存在的托管对象进行更新那么肯定是要使用 ...

  8. RunLoop总结:RunLoop的应用场景(三)

    今天要讲的RunLoop的应用场景可能太简单了,所以东西比较少.因为跟UITableView.UICollectionView等的滑动优化有关,就顺便总结一下会影响UITableView.UIColl ...

  9. 高通平台MSM8916LCM模块移植(一)-bootloader部分

    此次移植打算分成两个模块来说,bootloader部分和kernel部分.在实际的移植调试过程中也是这么分成了两个部分分别调试. 高通平台中的bootloader叫做LK(Little Kernel, ...

  10. Perl IO:文件锁

    文件锁 当多个进程或多个程序都想要修同一个文件的时候,如果不加控制,多进程或多程序将可能导致文件更新的丢失. 例如进程1和进程2都要写入数据到a.txt中,进程1获取到了文件句柄,进程2也获取到了文件 ...