当前位置:首页 » 《随便一记》 » 正文

实验3完整代码_笑霸fianl的博客

28 人参与  2022年04月16日 13:59  分类 : 《随便一记》  评论

点击全文阅读


#include<iostream>
#include<Windows.h>
using namespace std;
//创建二叉树结构体;
typedef struct BiTNode {
	int data;
	struct BiTNode *lchild, *rchild;//左右孩子指针 
}BiTNode, *BiTree;
//构建一个循环队列
typedef struct Qnode {
	BiTNode *base;
	int front;//头
	int rear;//尾
}sqQueue;
class tree {
private:
	BiTree root;
	sqQueue q;
public:

	tree() {
		CreatBiTree(root);
	}
	BiTree get_root() {//得到root节点;
		return root;
	}
	//创建一个循环队列
	void InitQueue(sqQueue &q) {
		q.base = new BiTNode[5];
		q.front = q.rear = 0;
	}
	//创建二叉树
	BiTree CreatBiTree(BiTree &t) {
		int val;
		cin >> val;
		getchar();
		if (val <= 0) t = NULL;
		else {
			t = new BiTNode;
			t->data = val;
			CreatBiTree(t->lchild);
			CreatBiTree(t->rchild);
		}
		return t;
	}
	//先序遍历
	void PreOrderTraverse(BiTree &t) {
		if (!t) return;
		else {
			cout << t->data << " ";
			PreOrderTraverse(t->lchild);
			PreOrderTraverse(t->rchild);
		}
	}
	//中序排序
	void InOrderTraverse(BiTree &t) {
		if (!t) return;
		else {
			InOrderTraverse(t->lchild);
			cout << t->data << " ";
			InOrderTraverse(t->rchild);
		}
	}
	//后序遍历
	void PostOrderTraverse(BiTree &t) {
		if (!t) return;
		else {
			PostOrderTraverse(t->lchild);
			PostOrderTraverse(t->rchild);
			cout << t->data << " ";
		}
	}
	//层序遍历
	void LevelOrderTraverse(BiTree &t) {
		if (!t)return;
		else {
			InitQueue(q);
			q.base[q.rear] = *t;
			q.rear = (q.rear + 1) % 5;
		}
		while (q.front != q.rear) {
			BiTNode temp = q.base[q.front];
			cout << temp.data << " ";
			if (temp.lchild) {
				q.base[q.rear] = *temp.lchild;
				q.rear = (q.rear + 1) % 5;
			}
			if (temp.rchild) {
				q.base[q.rear] = *temp.rchild;
				q.rear = (q.rear + 1) % 5;
			}
			q.front = (q.front + 1) % 5;
		}
	}
	//统计节点的数目
	void Count_TreeEnds(BiTree &t, int &n) {
		if (t) {
			if (!t->lchild && !t->rchild)
				n++;
			Count_TreeEnds(t->lchild, n);
			Count_TreeEnds(t->rchild, n);
		}

	}
	//交换左右子树
	BiTree Exchange(BiTree &t) {
		if (!t)return NULL;
		BiTree lchild = Exchange(t->rchild);
		BiTree rchild = Exchange(t->lchild);
		t->lchild = lchild;
		t->rchild = rchild;
		return t;
	}
	//5. 计算并输出该二叉树的深度。
	int Depth(BiTree &t) {
		int l = 0, r = 0;
		if (t == NULL) return 0;
		l = Depth(t->lchild) + 1;
		r = Depth(t->rchild) + 1;
		return l > r ? l : r;
	}


};
int main() {
	tree T;
	int n = 0;//叶子结点
	int deep;//深度
	BiTree PT = T.get_root();
	cout << "先序遍历:";
	T.PreOrderTraverse(PT); cout << endl;
	cout << "中序遍历:";
	T.InOrderTraverse(PT); cout << endl;
	cout << "后序遍历:";
	T.PostOrderTraverse(PT); cout << endl;
	cout << "层序遍历:";
	T.LevelOrderTraverse(PT); cout << endl;
	cout << "叶子节点数:";
	T.Count_TreeEnds(PT, n);
	cout << n << endl;
	BiTree exT;
	exT = T.Exchange(PT);
	cout << "交换后的先序遍历:";
	T.PreOrderTraverse(exT); cout << endl;
	cout << "该二叉树的深度:";
	deep = T.Depth(exT); cout << deep << endl;
	system("pause");
	return 0;
}

点击全文阅读


本文链接:http://zhangshiyu.com/post/38183.html

遍历  节点  二叉树  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 家宴过后,我捉奸了庶妹和我老公无广告_庶妹老公侍卫TOP10_小说后续在线阅读_无删减免费完结_
  • 寝室六个人,她们背着我建五人群必读文_太天真申请书冷笑最新阅读_小说后续在线阅读_无删减免费完结_
  • 开局获得狐仙传承结局+番外_江帆赵雪隐藏剧情_小说后续在线阅读_无删减免费完结_
  • 刀锈春根生,白骨犹温完结全文_卫舟棠棠知意一口气完结_小说后续在线阅读_无删减免费完结_
  • 夫君立筷子定我灾星罪名,我改嫁冷宫皇子后他追悔莫及好评_赵荀孟如安青瑶精心编著_小说后续在线阅读_无删减免费完结_
  • 邻居低素质,而我没素质独家番外_老太太赖皮欣欣超长版_小说后续在线阅读_无删减免费完结_
  • 重生后我转嫁首富瘸腿独子,总裁前夫却疯了一口气看完_妹妹傅云琛沈明辉独家番外_小说后续在线阅读_无删减免费完结_
  • 我拒绝给系花捐款后,全系同学悔疯了在线阅读_小说后续在线阅读_无删减免费完结_
  • 我让位给女友的透视眼竹马,他却说如果能重生再也不来了。虐心反转_玉石林若女友推荐_小说后续在线阅读_无删减免费完结_
  • 相国独子的丫鬟砸坏我的玉佩后,我当场拒婚阅读_玉佩陈郡谢氏全新_小说后续在线阅读_无删减免费完结_
  • 手术时,我看着病人惨死最新试读_淼淼陆知衍姜颜全本完结_小说后续在线阅读_无删减免费完结_
  • 男友霸道给我开黑卡,转头却骂我是捞女最新章节_肖年顾客黑卡热文_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1