5.5二叉树的遍历
来源:互联网 发布:大数据培训课程ppt 编辑:程序博客网 时间:2024/05/16 11:02
#include <stdio.h>#include <stdlib.h>#define MAX 50//二叉树链表存储结构typedef struct btnode{ int data; //结点数据内容 struct btnode *Llink; //左子树指针 struct btnode *Rlink; //右子树指针}btnode, *btreetype;/****---------------------------------------------****///函数名: OutputTree(btreetype &root)//参数: (传入)btreetype &root 二叉树指针//功能: 输出二叉树/****---------------------------------------------****/void OutputTree(btreetype &root){ btreetype p; //打印左子树 p = root->Llink; printf("建立的二叉树的左子树:"); while(p != NULL) { printf("%d ",p->data); p = p->Llink; } //打印右子树 p = root->Rlink; printf("\n建立的二叉树的右子树为:"); while(p != NULL) { printf("%d ", p->data); p = p->Rlink; }}/****--------------------------------------------****///函数名: PreOrder(btreetype &root)//参数: (传入)btreetype &root二叉树指针//功能: 先序遍历二叉树/****--------------------------------------------****/void PreOrder(btreetype &root){ btreetype p; p = root; if(p != NULL) { printf("%d ",p->data); PreOrder(p->Llink); //递归处理左子树 PreOrder(p->Rlink); //递归处理右子树 }}/****--------------------------------------------****///函数名: InOrder(btreetype &root)//参数: (传入)btreetype &root二叉树指针//功能: 中序遍历二叉树(递归方式)/****--------------------------------------------****/void InOrder(btreetype &root){ btreetype p; p = root; if(p != NULL) { InOrder(p->Llink); //递归处理左子树 printf("%d ", p->data); InOrder(p->Rlink); //递归处理右子树 }}/****-------------------------------------------****///函数名: InOrder(btreetype &root)//参数: (传入)btreetype &root二叉树指针//功能: 中序遍历二叉树(非递归方式)/****--------------------------------------------****/void InOrder_Norecursion(btreetype &root){ btreetype stack[MAX]; btreetype p; int top = 0; p = root; do { while(p != NULL) //扫描左结点 { top++; stack[top] = p; p = p->Llink; } if(top > 0) { p = stack[top]; //p所指结点为无左子树或其左子树已遍历过 top--; printf("%d ", p->data); p = p->Rlink; //扫描右结点 } }while(p != NULL || top != 0);}/****--------------------------------------------****///函数名: PostOrder(btreetype &root)//参数: (传入)btreetype &root 二叉树指针//功能: 后序遍历二叉树/****--------------------------------------------****/void PostOrder(btreetype &root){ btreetype p; p = root; if(p != NULL) { PreOrder(p->Llink); //递归处理左子树 PreOrder(p->Rlink); //递归处理右子树 printf("%d ", p->data); }}/****--------------------------------------------****///函数名: CreateTree(int n)//参数: (传入)int n数据数量//返回值: 返回二叉树(根结点)指针//功能: 建立二叉树/****--------------------------------------------****/btreetype CreateTree(int n){ int i; btreetype root = NULL; for(i = 0; i < n; i++) { btreetype newNode; btreetype currentNode; btreetype parentNode; //建立新结点 newNode = (btreetype)malloc(sizeof(btnode)); scanf("%d", &newNode->data); /*新结点赋值*/ newNode->Llink = NULL; newNode->Rlink = NULL; currentNode = root; //存储当前结点指针 if(currentNode == NULL) root = newNode; //以新结点作为二叉树根结点 else { while(currentNode != NULL) { parentNode = currentNode; //存储当前结点的父结点 if(newNode->data < currentNode->data) //比较结点数值大小 currentNode = currentNode->Llink; //左子树 else currentNode = currentNode->Rlink; //右子树 } //根据数值大小连接父结点和子结点 if(newNode->data < parentNode->data) parentNode->Llink = newNode; else parentNode->Rlink = newNode; }//else }//for return root;}/****------------测试主程序------------------****/int main(){ btreetype btree; int count; printf("input the number of elements:\n"); scanf("%d", &count); printf("input data(num = %d):\n", count); btree = CreateTree(count); //二叉树的各种遍历 printf("\n先序遍历建立的二叉树:"); PreOrder(btree); printf("\n中序遍历建立的二叉树(递归方式):"); InOrder(btree); printf("\n中序遍历建立的二叉树(非递归方式):"); InOrder_Norecursion(btree); printf("\n后序遍历建立的二叉树:"); PostOrder(btree); return 0;}
0 0
- 5.5二叉树的遍历
- 5.5二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 转载
- java-java包裹类
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- 加盟学天--尊享年收益百万
- Ubuntu下整合eclipse pydev和virtualenv进行开发
- 5.5二叉树的遍历
- iOS系统版本
- UVA 11248 Frequency Hopping 最小割
- 常用到的东西
- TalkBand B2外观优雅,蓝牙耳机引人瞩目
- HTML学习笔记之二(回到顶部 与 回到底部)
- android 布局
- 第一章
- 单例模式简单实现