关于二叉树
来源:互联网 发布:简易电气画图软件 编辑:程序博客网 时间:2024/04/29 23:43
1、二叉树的建立
#include<iostream>#include<stdlib.h>using namespace std;typedef struct BTNode{char data;struct BTNode *lchild;struct BTNode *rchild;}BTNode;void createBTree(BTNode *&root){char c; cin>>c;fflush(stdin);if(c=='#'){root=NULL;}else{root=(BTNode *)malloc(sizeof(BTNode));root->data=c;cout<<"please print the left child"<<endl;createBTree(root->lchild);cout<<"please print the right child"<<endl;createBTree(root->rchild);}}int main(){BTNode *root;createBTree(root);}
2、二叉树的先序中序后序递归遍历
//二叉树的先序递归遍历void preorderRaversal(BTNode *root){if(root){cout<<root->data<<" ";preorderRaversal(root->lchild);preorderRaversal(root->rchild);}}//二叉树的中序递归遍历void inorderRaversal(BTNode *root){if(root){inorderRaversal(root->lchild);cout<<root->data<<" ";inorderRaversal(root->rchild);}}//二叉树的后续递归遍历void postorderRaversal(BTNode *root){if(root){postorderRaversal(root->lchild);postorderRaversal(root->rchild);cout<<root->data<<" ";}}
3、二叉树的递归求深
int getDepth(BTNode *root){int LD,RD;if(!root)return 0;else{LD=getDepth(root->lchild);RD=getDepth(root->rchild);return (LD>RD ? LD:RD)+1;}}
4、二叉树的先序非递归遍历
对任一节点p
1)访问p节点,并将p节点入栈
2)判断p节点的左孩子是否为空,若为空,则取栈顶节点并进行出栈操作,并将p右孩子置为当前的节点p,循环至1),若不为空,则将p的左孩子置为p
3)直到p为NULL,并且栈为空
//二叉树的先序非递归遍历void preorderRaversal2(BTNode *root){const stack<BTNode>::size_type stackSize=100; //给定栈的大小stack<BTNode> BTNodeStack; //定义一个空栈BTNode *p=root;while(p||!BTNodeStack.empty()){while(p){cout<<p->data<<" "; BTNodeStack.push(*p);p=p->lchild;}if(!BTNodeStack.empty()){p=&BTNodeStack.top();BTNodeStack.pop();p=p->rchild;}}}
5、二叉树的中序非递归遍历
//中序非递归遍历void inorderRaversal2(BTNode *root){const stack<BTNode>::size_type stackSize=100; //给定栈的大小stack<BTNode> BTNodeStack; //定义一个空栈BTNode *p=root;while(p||!BTNodeStack.empty()){while(p){BTNodeStack.push(*p);p=p->lchild;}if(!BTNodeStack.empty()){p=&BTNodeStack.top();BTNodeStack.pop();cout<<p->data<<" ";p=p->rchild;}}}
6、二叉树的后序非递归遍历
typedef enum{L,R} tagtype;typedef struct {BTNode *p;tagtype tag;}stacknode;void postorderRaversal2(BTNode *root){const stack<stacknode>::size_type stackSize=100; //给定栈的大小stack<stacknode> BTNodeStack; //定义一个空栈BTNode *p=root;stacknode x;do {while (p){x.p=p;x.tag=L;BTNodeStack.push(x);p=p->lchild;}while(!BTNodeStack.empty()&&BTNodeStack.top().tag==R){x=BTNodeStack.top();BTNodeStack.pop();p=x.p;cout<<p->data<<" ";}if(!BTNodeStack.empty()){BTNodeStack.top().tag=R;p=BTNodeStack.top().p->rchild;}}while(!BTNodeStack.empty());}
- 关于二叉树有感
- 关于二叉查找树
- 关于二叉树
- 关于二叉树
- 关于各种二叉树
- 关于平衡二叉树
- 关于二叉树
- 关于二叉树
- 关于二叉树遍历
- 关于二叉树问题
- 关于二叉树
- 关于数据结构--二叉树
- 关于二叉树的迷惑
- 关于二叉树的遍历
- 关于二叉树的遍历
- 关于二叉树的遍历
- 【学习笔记】关于二叉树
- 算法杂谈--关于二叉树
- 算法的一些代码
- cs8900的基地址
- 线程执行的顺序 等线程执行完再执行下一个线程
- doveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf line 86: No matches
- SQL join
- 关于二叉树
- UVa 10905 - Children's Game
- Mouhout运行k-means算法
- ubuntu 为Apache Hadoop源码建立Eclipse项目
- css3 transition unfold(折叠效果)
- [Latex]实现文字闪烁的示例
- Spring 集合注入 [ Collection Injection ]
- LA - 5734(hdu - 4162) - Shape Number(指针扫描+贪心)
- C语言字符串操作函数