博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的遍历(先、中、后、层序)C实现
阅读量:4216 次
发布时间:2019-05-26

本文共 2326 字,大约阅读时间需要 7 分钟。

#include
#include
#include
using namespace std;typedef struct TreeNode* BiTree;typedef char ElementType;struct TreeNode{ ElementType Data; BiTree Left; BiTree Right;};BiTree CreateTree() { ElementType ch; BiTree T = (BiTree)malloc(sizeof(struct TreeNode)); if(T == NULL){ printf("Over flow"); return NULL; } scanf("%c",&ch); if(ch == '#') T = NULL; else{ T->Data = ch; T->Left = CreateTree(); T->Right = CreateTree(); } return T; } void PreTraversal(BiTree T)//递归版本 先序遍历 { if(T != NULL){ printf("%c ",T->Data); PreTraversal(T->Left); PreTraversal(T->Right); } } void PreTraversalRe(BiTree T)//非递归前序遍历 { stack
S; while(T != NULL || !S.empty()){ while(T != NULL){ printf("%c ",T->Data); S.push(T); T = T->Left; } if(!S.empty()){ T = S.top(); S.pop(); T = T->Right; } } }void InTraversal(BiTree T)//递归版本中序遍历 { if(T != NULL){ InTraversal(T->Left); printf("%c ",T->Data); InTraversal(T->Right); } } void InTraversalRe(BiTree T)//非递归中序遍历 { stack
S; while(T != NULL || !S.empty()){ while(T != NULL){ S.push(T); T = T->Left; } if(!S.empty()){ T = S.top(); printf("%c ",T->Data); S.pop(); T = T->Right; } } } void PostTraversal(BiTree T)//递归版本 后续遍历 { if(T != NULL){ PreTraversal(T->Left); PreTraversal(T->Right); printf("%c ",T->Data); } } void PostTraversalRe(BiTree T) //非递归 后序遍历 { BiTree Pre = NULL; stack
S; while(T != NULL || !S.empty()){ while(T != NULL){ S.push(T); T = T->Left; } T = S.top(); if(T->Right == NULL || Pre == T->Right){ printf("%c ",T->Data); S.pop(); Pre = T; T = NULL; //为了 继续取栈顶元素 } else{ T = T->Right; } } } void LevelOrderTraversal(BiTree T)//层序遍历 { deque
Q; if(T == NULL) return; Q.push_back(T); while( !Q.empty()){ T = Q.front(); Q.pop_front(); printf("%c ",T->Data); if(T->Left != NULL) Q.push_back(T->Left); if(T->Right != NULL) Q.push_back(T->Right); } } int main() { BiTree BT; BT = CreateTree(); printf("递归先序遍历 :\n"); PreTraversal(BT); printf("\n非递归先序遍历 :\n"); PreTraversalRe(BT); printf("\n递归中序遍历 :\n"); InTraversal(BT); printf("\n非递归中序遍历 :\n"); InTraversalRe(BT); printf("\n递归后续遍历 :\n"); PostTraversalRe(BT); printf("\n非递归后续遍历 :\n"); PostTraversalRe(BT); printf("\n层序遍历 :\n"); LevelOrderTraversal(BT); return 0; }
你可能感兴趣的文章
test-definitions/blob/master/auto-test/bazel/bazel.sh
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>
/test-definitions/blob/master/auto-test/blktrace/blktrace.sh
查看>>
test-definitions/blob/master/auto-test/blogbench/blogbench.sh
查看>>
test-definitions/blob/master/auto-test/boost/boost.sh
查看>>
Java多态性理解
查看>>
Intellij Idea 工具在java文件中怎么避免 import .*包,以及import包顺序的问题
查看>>
IDEA Properties中文unicode转码问题
查看>>
Oracle中Blob转换成Clob
查看>>
Linux如何查看so中函数名
查看>>
自动管理代码的android.mk
查看>>
cocos2dx 2.2.6编译记录(1)
查看>>
makefile学习网站
查看>>
C 编写lua模块(1)
查看>>
Lua教程:Lua调用C/C++函数(4)
查看>>
win下创建win32控制台工程,执行lua脚本
查看>>
cocos2dx android启动错误
查看>>
eclipse: android rename package name
查看>>
cocos2dx c++调用java思想
查看>>
cocos2dx lua Node节点 私有数据存取
查看>>