搜索二叉树

头文件

#include<iostream>      //输入输出流
#include<stdlib>     //随机函数要用
#include<ctime>      //使随机函数随时间变化
#include<iomanip>     //按格式输出
using namespace std;

结构体

typedef struct node{      
	int data;             //二叉树的节点所带的信息为整型变量
	struct node *rihgt;    //建立一个指向左边节点,指向结构体的指针
	struct node *left;      //同上
}Node;                   //将struct node重定义为Node

typedef struct            
{
	Node* root;           定义一个指向root的结构体指针
}Tree;             //将此struct 重定义为Tree

主函数

int main()  
{
	int arr[7] = { 6,3,8,2,5,1,7 };    //这里预先将数据存在数组中
	Tree tree;        //实例化一个对象tree
	tree.root = NULL;       //令root指向NULL,避免野指针出现
 	for (int i = 0; i < 7; i++) {
		insert(&tree, arr[i]);       //建立二叉树,并利用循环将数组中的数据依次插入二叉树中
	}
	inorder(tree.root);       //按从小到大的顺序依次输出二叉树的数据(中序)
	system("pause");            //让系统停止执行,方便观察结果
	return 0;         
}

建立二叉树并存入数据

要求:root->data   >  root->left->data  

and   root->data   <  root->right->data

即 根>左 并且 根<右

 void insert(Tree* tree, int value) {      

	Node* node = new Node;      //新建一个节点node
	node->data = value;           //将传递过来的参数存入新节点中
	node->left = NULL;              //避免野指针
	node->rihgt = NULL;               //同上
	if (tree->root == NULL) {            //如果当前节点为空    
		tree->root = node;             //就将新节点连接在当前节点
	}                               
	else {                                  //如果当前节点不为空
		Node* temp = tree->root;        //新建一个节点temp并指向当前节点
		while (temp != NULL) {             //如果temp不为空
			if (value < temp->data) {               //判断temp->data与node->data的大小
				if (temp->left == NULL) {     //当temp的left为空时 
					temp->left = node;         //将node连接作为temp的左子树
					return ;            //结束当前函数
				}
				else {                  //当temp的left不为空时
					temp = temp->left;     //令temp为temp的左儿子
				}          //进入下一轮循环检查temp->data与node->data的大小
			}
			else {                    //如果temp->data小于node->data	
				if (temp->rihgt == NULL) {
					temp->rihgt = node;
					return ;
				}
				else {
					temp = temp->rihgt;
				}
			}
		}
	}
}


遍历二叉树

遵循先左后根再右

void inorder(Node* node) {              
	if (node != NULL) {               //当前节点为空时结束程序
		inorder(node->left);           //先一路向左走,直到最末节点
		cout << node->data << endl;         //输出当前节点的值
		inorder(node->rihgt);           //输出当前节点右子树的值
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值