二叉树相关操作
来源:互联网 发布:js初始化数组并赋值 编辑:程序博客网 时间:2024/04/20 02:44
1.先序遍历(递归)
void PreOrder(Node* root){ if(root==NULL) return; visit(root); PreOrder(root->lchild); PreOrder(root->rchild);}
2.先序遍历(非递归)
void PreOrder(Node *root){ if(root==NULL) return; Node *p=root; stack<Node*>s; while(p!=NULL||!s.empty()){ visit(p); s.push(p); p=p->lchild; } if(!s.empty()){ p=s.top()->rchild; s.pop(); }}
3.中序遍历(递归)
void InOrder(Node* root){ if(root==NULL) return; InOrder(root->lchild); visit(root); InOrder(root->rchild);}
4.中序遍历(非递归)
void InOrder(Node *root){ if(root==NULL) return; Node *p=root; stack<Node*>s; while(p!=NULL||!s.empty()){ s.push(p); p=p->lchild; } if(!s.empty()){ p=s.top()->rchild; visit(p); s.pop(); }}
5.后续遍历(递归)
void PostOrder(Node* root){ if(root==NULL) return; PostOrder(root->lchild); PostOrder(root->rchild); visit(root);}
6.层序遍历
void LevelTranverse(Node *root){ if(root==NULL) return; queue<Node*>q; q.push(root); while(!q.empty()){ visit(q.front()); q.pop(); if(root->lchild) q.push(root->lchild); if(root->rchild) q.push(root->rchild); }}
7.求总的节点数
int sum(Node *root){ if(root==NULL) return 0; else 1+sum(root->lchild)+sum(root->rchild);}
8.求度为0的节点(即叶子结点)个数
int sum(Node *root){ if(root==NULL) return 0; else if(root->lchild==NULL&&root->rchild==NULL) return 1; else return sum(root->lchild)+sum(root->rchild);}
9.求度为1的节点个数
int sum(Node *root){ if(root==NULL) return 0; else if(root->lchild==NULL&&root->rchild!=NULL||root->rchild==NULL&&root->lchild!=NULL) return 1; else return sum(root->lchild)+sum(root->rchild);}
10.求度为2的节点个数
int sum(Node *root){ if(root==NULL) return 0; else if(root->lchild!=NULL&&root->rchild!=NULL) return 1; else return sum(root->lchild)+sum(root->rchild);}
11.求树的高度
int high(Node *root){ if(root==NULL) return 0; int n1=high(root->lchild),n2=high(root->rchild); return max(n1,n2)+1;}
12.求x所在的层数
int level(Node *root,int x){ if(root==NULL) return 0; else if(root->data==x) return 1; else{ int c1=level(root->lchild,x); if(c1>=1) return c1+1; int c2=level(root->rchild,x); if(c2>=1) return c2+1; } return 0;}
13.输出二叉树的第level层
int level_out(Node *root,int level){ if(root==NULL) return; if(level==1) visit(root); else{ level_out(root->lchild,level-1); level_out(root->rchild,level-1); }}
阅读全文
0 0
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树 相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树的相关操作
- 二叉树相关操作收集
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树相关操作2
- 二叉树相关操作之一
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 使用Java VisualVM监控远程JVM(远程服务器为linux配置)
- hdu 1272 (基础并查集★ )
- Mac git 下 tab 自动补全
- ubuntu下格式化被写保护的U盘
- 概率论(三)- 全概公式&逆概公式(贝叶斯公式)
- 二叉树相关操作
- TCP/IP四层模型和OSI七层模型
- CSU
- HTML5性能优化(二)
- 借助Visual Studio Code提高基于ActionScript的LayaAir HTML5游戏的调试效率
- Ubuntu 16.04 安装配置 Nginx 和 Geoip,实现不同城市页面跳转功能
- 想不想知道你所在的城市地震危险度
- mysql主从同步常见问题
- 关于static关键字