二叉排序树(模板)

使用malloc函数,需要调用头文件# include <malloc.h>

malloc函数的作用是动态分配内存,以解决静态内存定长、不能手动释放等缺陷。

malloc的使用方法:

int *p = (int *)malloc(sizeof(int));
*p = 1;
free(p);

其中,p为一个整型指针变量,由int *p = (int*)malloc(sizeof(int))可以看出来,这句话在给*p分配内存.

malloc函数支持一个形参(该形参就是字节大小),而sizeof(int)计算出了我们需要的字节数,malloc函数的返回值是一个地址,把分配的动态内存的地址赋给指针p,就是在为*p开辟了一块动态内存。

free(p)则是释放了p所指向的内存。
 

#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <malloc.h>
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct Node {//结点
	int data;
	Node *left;
	Node *right;

};
struct Tree {//树的根结点指针
	Node *root;
};
void insert(Tree *tree, int value) { //插入结点
	//首先把value打包成一个结点
	Node *node = (Node *)malloc(sizeof(Node));//malloc 当程序退出的时候 node 不会被内存销毁
	node -> data  = value;
	node -> left  = NULL;
	node -> right = NULL;
	if (tree -> root == NULL) {//当树根为空时,插入树根结点
		tree -> root = node;
	} else {//树根不为空时
		Node *temp = tree -> root;//寻找合适的位置插入新的结点
		while (temp != NULL) {
			if (temp ->data > value) {//需要插入的数值比当前结点大
				if (temp -> left == NULL) {//找到合适的位置,插入值,并返回
					temp -> left = node;
					return ;
				} else {//往树的左边找
					temp = temp -> left;
				}
			} else {
				if (temp -> right == NULL) {//需要插入的数值比当前结点小
					temp -> right = node;//找到合适的位置,插入值,并返回
					return ;
				} else {//往树的右边找
					temp = temp -> right;
				}
			}
		}
	}
}
void preorder(Node *node) {//前序遍历(根 左 右),先输出
	if (node != NULL) {
		printf("%d\n", node->data);
		preorder(node->left);
		preorder(node->right);
	}
}
void inorder(Node *node) {//中序遍历(左 右 根),中间输出
	if (node != NULL) {//中序遍历是从小到大排序的
		inorder(node -> left);
		printf("%d\n", node -> data);
		inorder(node->right);
	}
}
void postorder(Node *node) {//后序遍历(左 右 根),最后输出
	if (node != NULL) {
		postorder(node -> left);
		postorder(node -> right);
		printf("%d\n", node -> data);
	}
}
int main() {
	int a[10] = {6, 3, 8, 2, 5, 1, 7};
	Tree tree;
	tree.root = NULL;
	for (int i = 0; i < 7; i++ )
		insert(&tree, a[i]);
	inorder(tree.root);
	return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值