- 浏览: 63060 次
- 性别:
- 来自: 北京
最新评论
c语言写着还挺带感
#include<stdlib.h> #define null 0 struct tree{ struct tree* left; int value; struct tree* right; }; typedef struct tree Tree; Tree* root; Tree* insert_rcs(Tree* root, int value){ //只在叶节点位置插入 if(root == null){ root = malloc(sizeof(Tree)); root->value = value; root->left = null; root->right = null; //返回新增的叶节点 return root; } if(root->value > value){ root->left = insert_rcs(root->left, value); }else{ root->right = insert_rcs(root->right, value); } return root; } Tree* insert_no_rcs(Tree* root, int value){ Tree* newnode = malloc(sizeof(Tree)); newnode->value = value; newnode->left = null; newnode->right = null; if(root == null){ root = newnode; return root; } //p为工作指针 Tree* p = root; //p节点是插入节点,pre节点时插入节点的父节点 Tree* pre; while(p){ pre = p; if(p->value > value){ p = p->left; }else{ p = p->right; } } if(pre->value > newnode->value){ pre->left = newnode; }else{ pre->right = newnode; } return root; } //前序遍历 void pre_print_rcs(Tree* root){ if(root != null){ printf("value: %d \t",root->value); pre_print_rcs(root->left); pre_print_rcs(root->right); } } Tree* Stack[20]; int top = -1; //前序遍历 非递归 void pre_print_no_rcs(Tree* root){ //top != -1 这个条件一定要加上,这是处理单枝情况 while(root != null || top != -1){ if(root != null){ printf("%d \t",root->value); if(top+1 != 20){ Stack[++top] = root; root = root->left; } }else{ root = Stack[top--]->right; } } } //中序遍历 void in_print_rcs(Tree* root){ if(root != null){ in_print_rcs(root->left); printf("value: %d \t",root->value); in_print_rcs(root->right); } } //中序遍历 非递归 void in_print_no_rcs(Tree* root){ //top != -1 这个条件一定要加上,这是处理单枝情况 while(root != null || top != -1){ if(root != null){ if(top+1 != 20){ Stack[++top] = root; root = root->left; } }else{ root = Stack[top--]; printf("%d \t",root->value); root = root->right; } } } //后序遍历 void post_print_rcs(Tree* root){ if(root != null){ post_print_rcs(root->left); post_print_rcs(root->right); printf("value: %d \t",root->value); } } Tree* Q[20]; int front; int rear; //层序遍历 //输出队头元素,并将左右子树如队列 void level_print(Tree* root){ front = rear = 0; if(root != null){ Q[++rear] = root; while(rear != front){ Tree* p = Q[++front]; printf("%d \t",p->value); if(p->left != null){ Q[++rear] = p->left; } if(p->right != null){ Q[++rear] = p->right; } } } } Tree* create_no_rcs(int* list, int n){ int i; for(i=0; i<n; i++){ root = insert_no_rcs(root, list[i]); } return root; } Tree* create_rcs(int* list, int n){ int i; for(i=0; i<n; i++){ root = insert_rcs(root, list[i]); } return root; } int main(){ int list[10] = { 6,9,7,4,5,2,1,8,12,0 }; //root = create_no_rcs(list, 10); root = create_rcs(list, 10); //pre_print_rcs(root); //pre_print_no_rcs(root); in_print_rcs(root); in_print_no_rcs(root); //post_print_rcs(root); //level_print(root); return 0; }
发表评论
-
求链表中间节点的值,检测链表的环
2012-07-27 14:19 852求链表中间节点的值,检测链表的环 int loop(st ... -
实习前记
2012-07-16 15:27 757经过回来一周的找工作,总体感觉就是很累啊,每天东跑西颠的。面了 ... -
php函数参数列表
2012-05-11 16:50 1429[size=medium] 1.直接传值 function ... -
php的ob_flush和flush
2012-05-10 21:20 1107php.ini中 output_buffering = of ... -
php读文件的4中方法。
2012-05-10 20:38 906fopen $fp = fopen("downl ... -
百度笔试算法题一道。
2012-05-10 15:02 985一个数组a[0-n-1],a[0-mid]和a[mid+1-n ... -
自己实现php UTF8中文字符串截取
2012-05-09 11:38 2881header("Content-type: te ... -
C与C++动态分配,释放内存的区别
2012-05-08 17:30 160611. malloc()函数 1.1 malloc的 ... -
nginx rewrite
2012-05-04 11:23 0http://blog.cafeneko.info/2010/ ... -
php magic method
2012-05-04 11:16 897php的魔术方法总结 php的魔术方法都是和类有关的。 ... -
诡异的 shell 08 bug
2012-04-30 01:11 771v=08 echo $v shell里以0开头的都会把它当作8 ... -
排序相关
2012-04-22 16:01 0排序分类 内排序: 交换式排序: ... -
php string
2012-04-22 11:33 971一.字符串类型 php一共有8中数据类型 ... -
php 深度优先递归输出路径下所有文件
2012-04-19 21:27 1524<?php $dir = " ... -
简单的栈
2012-04-19 21:14 705#include <stdio.h> #de ... -
简单的循环队列
2012-04-19 21:13 805#include <stdlib.h> ... -
单链表删除一个节点
2012-04-19 21:10 9853有头结点的情况,附加一个逆置 #include <s ... -
KMP与BF,实现了一个非主流next函数
2012-04-19 20:16 929#include <stdlib.h> #i ... -
ip过滤问题
2012-03-22 21:09 0假设有很多段ip段属于教育网的,如何尽快辨别一用户ip是否属于 ... -
求三叉树高度
2012-03-18 17:05 3146有12345个结点的满3叉数的高度为_____写出计算过程 ...
相关推荐
树的递归、非递归前序中序后序遍历实现,层序遍历,及树的Morris前序中序后序遍历实现。main函数有测试样例,测试样例是A B D F E C G H I 。注意空出的地方是空格,前序建树。
后序遍历的顺序是递归地进行左子树的后序遍历,然后递归地进行右子树的后序遍历,最后访问根节点。实现代码如下: ```c void Postoder(BiTree T) { if (T != NULL) { Postoder(T->lchild); // 递归遍历左子树 ...
本主题主要探讨的是在MFC(Microsoft Foundation Classes)环境中如何实现二叉树的前序、中序和后序遍历。 首先,让我们了解一下二叉树的三种遍历方法: 1. 前序遍历:前序遍历的顺序是“根-左-右”。即首先访问根...
文件"非递归前序,中序,后序遍历二叉树(优化算法)"可能包含具体的代码实现和解释,而"www.pudn.com.txt"可能是提供资料的链接或相关讨论。学习和实践这些算法,能够提高对二叉树操作的理解和处理能力。
根据给定的文件信息,本文将详细介绍二叉树的基本概念及其前序、中序和后序遍历的实现原理,并对代码进行分析。 ### 一、二叉树基础概念 二叉树是一种特殊的非线性数据结构,它具有以下特点: - 每个节点最多有两...
### 二叉树先序、中序、后序遍历非递归算法 #### 前言 在计算机科学中,二叉树是一种常见的数据结构,它被广泛应用于各种算法和程序设计中。二叉树的遍历是理解并操作二叉树的基础,通常有三种主要的遍历方式:...
二叉树的遍历通常分为三种:前序遍历(根左右)、中序遍历(左根右)和后序遍历(左右根)。通常情况下,我们都是通过递归的方式来实现这些遍历方法,但是递归方式可能会导致大量的函数调用开销,甚至可能导致栈溢出...
二叉树的遍历主要有三种方式:前序遍历、中序遍历和后序遍历。 1. **前序遍历**: - 访问根节点; - 遍历左子树; - 遍历右子树。 这种遍历方式通常用于复制二叉树或构建一个新的与原二叉树结构相同的二叉树...
本节将详细介绍二叉树的前序、中序和后序遍历,以及如何求解二叉树的深度和叶节点数量。 **前序遍历(Preorder Traversal)** 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。在代码实现中,通常采用递归的方式...
标题"关于二叉树前序和后序的非递归遍历算法"指的是不使用递归函数来实现二叉树的前序和后序遍历。递归方法虽然直观,但在处理大型二叉树时可能会导致栈溢出,因此非递归方法是一个更优的选择。 **前序遍历**是...
关于数据结构实验的二叉树问题
本文将深入探讨二叉树的前序、中序、后序遍历的递归和非递归算法。 1. **前序遍历**: - **递归算法**:首先访问根节点,然后递归地对左子树进行前序遍历,最后对右子树进行前序遍历。伪代码如下: ``` function...
在给定的“LastOrderTree.rar”压缩包中,包含了名为“LastOrderTree.C”的源代码文件,这很可能是用C语言实现的一个二叉树的程序,它涵盖了前序、中序和后序遍历算法。此外,还有一个“www.pudn.com.txt”的文本...
本主题将详细介绍如何非递归地进行二叉树的前序、中序和后序遍历,以及如何使用C语言实现通用栈结构来辅助遍历。 首先,我们来看递归遍历的方法。递归遍历是基于函数调用自身来完成的,对于二叉树,有以下三种遍历...
下面将分别讨论后序创建、递归后序遍历、非递归堆栈后序遍历以及后序销毁。 1. **后序创建**: 在创建链式二叉树时,后序遍历可以用于构建原始输入序列。例如,如果给定一个后序遍历序列和一个中序遍历序列,我们...
这里我们将重点讨论如何在已知二叉树的前序和中序遍历的情况下,通过非递归算法实现后序遍历。 **前序遍历**:根节点 -> 左子树 -> 右子树 **中序遍历**:左子树 -> 根节点 -> 右子树 **后序遍历**:左子树 -> 右子...
这里我们详细讨论前序遍历、中序遍历、后序遍历以及层次遍历这四种基本遍历方式。 **一、前序遍历(根左右)** 前序遍历首先访问根节点,然后递归地遍历左子树,最后遍历右子树。递归实现时,首先访问根节点,然后...
根据访问节点的顺序不同,常见的遍历方法包括前序遍历、中序遍历、后序遍历和层次遍历。此外,我们还需要了解如何计算二叉树的宽度和深度。 #### 三、递归遍历 递归遍历是最直观的方法,它利用了递归的思想,将大的...
二叉树前序,中序,后序,求深度的递归和非递归方法
### 非递归前序遍历实现 非递归的前序遍历实现主要依赖于栈的数据结构。以下是对给定代码的详细解析: 1. **定义结构体**:`struct BiTNode` 定义了二叉树的节点结构,包含数据域`data`,以及指向左右子节点的指针...