树 |算法题合集

平衡树二叉 BST

        定义:左子树<根<右子树

非递归写法

1.代码注释丰富

2.这{}用的太差劲! 找了好久才知道谁是谁的  }{!!!

3.参数介绍:

        1.Tree 树结点结构体

        2.函数参数 data 传入数据 root 是起点地址,用 *&

        3.pPre 追随者,pCur 探路者

#include<cstdio>
#include<vector>
using namespace std;
struct  Tree {				//树的数据结构  注意下面的指针
	int data;
	Tree* left;
	Tree* right;

};
//造一个二叉搜索树
void insertBST(int data, Tree* &root) {  //BST一开始是空的,根据data输入建立BST
	Tree* pnew = new Tree;				//set up  新结点
	pnew->data = data;					//		  新结点初始化   (3步:数值,空指针)
	pnew->left = NULL;
	pnew->right = NULL;

	if (root == NULL) 
	{					//根是空的,根就是新来的  结点
		root = pnew;
	}
	else {
		Tree* pPre = root;				//造两个指针,father:   Pre 跟随者,    son:   Cur 探路者!
		Tree* pCur;
		while (true) {
			if (data < pPre->data) {	    //一级判断:新来的数,比根节点小
				pCur = pPre->left;
				if (pCur == NULL) {
					pPre->left = pnew;
					break;					//二级:当左子树是空,那么正好pnew插左子树
				}
				else {
					pPre = pCur;           //二级:当左子树不空:让pPre降级为pCur-----继续往左边走,继续循环
				}
			}
			if (data > pPre->data) {
				pCur = pPre->right;
				if (pCur == NULL) {
					pPre->right = pnew;
					break;
				}
				else pPre = pCur;
			}

		}
	}

}

int main(){
		Tree* root = NULL;
		int a[] = { 2,3,4,5,6 };           //测试成功,数据取递增的
		for(int i = 0; i < 5; i++) {

			insertBST(a[i], root);
		}
	}

例题

例题1. 函数区修改:插入成功打印 Pre->data,root==NULL 打印 -1

KY124 二叉搜索树

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机视觉入门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值