首页 > 编程语言 >逐点插入法【二叉查找(排序)树的插入算法】

逐点插入法【二叉查找(排序)树的插入算法】

时间:2024-04-05 19:59:20浏览次数:25  
标签:结点 右子 逐点 father 二叉 查找 72 插入法

问题描述:利用逐点插入法建立序列{50,72,43,85,75,20,35,45,65,30}对应的二叉树排序后,查找元素30要进行多少次元素间的比较?

首先我来解释以下什么是二叉查找树

二叉查找树是一棵空树或者是具有如下性质的二叉树:
(1)若它的左子树非空,则左子树中所有结点的值均小于根节点的值
(2)若它的右子树非空,则右子树中所有结点的值均大于根节点的值
(2)左右子树也是二叉查找树

换一种说法,对于每个结点,左子树(包括左子树中的所有结点)要小于该结点,右子树(包括右子树中的所有结点)大于该点。

因此,二叉查找树的中序遍历结果是一个递增有序的序列

接下来我来解释一下什么是逐点插入法

逐点插入法,对于二叉树序列的建立来说,其实就是按照二叉查找树的的定义来进行排序

也就是说,对于本题,分析如下:
创建根节点50,因为72>50,将72作为50所在结点的右子树的关键码值

关键码值:数据结构中,数据元素中能起标识作用的数据项

对于43,43<50,作为50所在结点的左子树的关键码值,根结点此时已经有了左右子树,也就是说第二层已经“满了”,现在应该讨论下一层(第二层)了,85>72,放入72所在结点右子树,75>72,理应放入72所在结点右子树,但是72已经有了右子树,所以应作为85所在结点的子结点,与关键码值85比较,75<85,所以应放入85所在结点的左子树,依次类推将后面所有树排序,二叉树的直观形式应该如下图所示:
二叉树的排序
二叉查找树查找算法如下:

typedef struct Tnode{
	int key;
	struct Tnode *lchild, *rchild;
}BSTnode, *Bitree;

int searchBST(Bitree root,int x,Bitree *father)
//若找到,返回所找到的结点的指针,否则返回NULL,由father带回父结点指针
{
Bitree p=root;
*father=NULL;//初始父结点指针为NULL

	while(p&&p->key!=x){//判断根结点不为空且不是要找的结点
	*father=p;//父结点指向该结点
		if(x<p->key)
		p->lchild;//根据定义判断,小的数应该从左子树查找
		else p=p->rchild;//大的数从右子树查找
	}//一旦查找到,循环停止
	return p;
}

二叉查找树的插入算法

int insertBST(Bitree *root,int newkey){
//插入键值为newkey的结点,插入成功返回0,否则返回-1
	Bitree s,p,father;
	s=(BSTnode *)malloc(sizeof(BSTnode));
		if(!s) return -1;//若分配内存失败,返回-1
	s->key=newkey;//键值为待插入数字
	s->lchild=NULL;
	s->rchild-NULL;
	p=searchBST(*root,newkey,&father);//调用查找函数,找到插入位置
		if(p) return -1;//找到了相同结点,p非空,返回-1
		if(!father) *root=s;
		//父结点为空,说明根结点为空,newkey直接作为树根
			else if(newkey<father->key)
				father->lchild=s;
					else father->rchild=s;
					//按定义放入父结点子树中
	return 0;
}

对于该问题,若要查找到30,应该与50,43,20,35,30分别比较才能得到,因此要进行5次元素间的比较

标签:结点,右子,逐点,father,二叉,查找,72,插入法
From: https://blog.csdn.net/learner_Van/article/details/137401735

相关文章

  • 数据结构:详解【树和二叉树】
    1.树的概念及结构(了解)1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。1.2树的结构1.3树与非树:1.4树在实际中的运用(表示文件系统的目录树结构)2.......
  • 二叉树计算【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-二叉树计算给出一个二叉树如下图所示:6/79\/-26请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。20(7-2+9+6)/\-26\/......
  • LC 96.不同的二叉搜索树
    96.不同的二叉搜索树给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。示例1:**输入:**n=3**输出:**5示例2:**输入:**n=1**输出:**1提示:1......
  • 删除二叉搜索树中的节点(力扣450)
    文章目录题目前知二叉搜索树是什么?题解一、思路二、解题方法三、Code总结题目Problem:450.删除二叉搜索树中的节点给定一个二叉搜索树的根节点root和一个值key,删除二叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新......
  • 栈的应用之二叉树的中序遍历
    中序遍历一、实例要求给定一个二叉树的根节点root,返回它的中序遍历;二、实例分析1、首先定义了二叉树的结构TreeNode,以及栈的结构Stack和相关操作;2、然后实现了中序遍历函数inorderTraversal,在遍历过程中使用栈来辅助实现;3、最后释放了内存;三、示例代码/**......
  • 代码随想录算法训练营第二十一天| 530. 二叉搜索树的最小绝对差 501. 二叉搜索树中的
    530.二叉搜索树的最小绝对差https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/TreeNodepre=null;intres=Integer.MAX_VALUE;publicintgetMinimumDifference(TreeNoderoot){if(root==null)return0;pr......
  • 二叉树的高效非递归层次遍历:一种O(n)时间复杂度与固定空间复杂度的解决方案
    @TOC在计算机科学中,二叉树是一种非常重要的数据结构,它在算法设计和问题解决中扮演着关键角色。本文将探讨如何使用非递归方法遍历一个给定的二叉树,并在不修改树结构的前提下,输出每个节点的关键字。这个过程将在O(n)的时间复杂度内完成,并且只使用固定量的额外存储空间。1.......
  • 稀碎从零算法笔记Day37-LeetCode:所有可能的真二叉树
    今天的每日一题,感觉理解的还不够深,有待加深理解题型:树、分治、递归链接:894.所有可能的真二叉树-力扣(LeetCode)来源:LeetCode题目描述给你一个整数 n ,请你找出所有可能含 n 个节点的 真二叉树 ,并以列表形式返回。答案中每棵树的每个节点都必须符合 Node.val==0 ......
  • leetcode每日一题 1379. 找出克隆二叉树中的相同节点
    问题描述给你两棵二叉树,原始树original和克隆树cloned,以及一个位于原始树original中的目标节点target。其中,克隆树cloned是原始树original的一个副本。请找出在树cloned中,与target相同的节点,并返回对该节点的引用(在C/C++等有指针的语言中返回节点指针,其他......
  • 二叉树
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......