每天一点数据结构之二叉树的查找和删除

每天一点数据结构之二叉树的查找

一.二叉树的查找我将它分为两类,一类是满足左子树的值小于根小于右子树,那么可以根据这个特性去查找会比较高效。
从根节点开始查找,如果当前值等于根则返回,如果小于根则沿左子树继续查找,如果大于根则沿右子树继续查找,直到找到为止,否则返回null。

BinaryTree.prototype.searchBalanceTree = function (data)
{
	var current = this.root;
	while (current != null)
	{
		if (current.data == data)
		{
			return current;
		}
		else if (current.data > data)
		{
			current = current.left;
		}
		else 
		{
			current = current.right;
		}
	}
	return null;
}



但是如果二叉树并不满足这个条件,那么就通过二叉树的遍历去查找了。先序,中序,后序都ok,这里就不附代码了。

二.二叉树的删除
二叉树的删除其实是最复杂的,列举一个简单的思路:
1.先找到要删除的结点
2.该结点一般分为两种类型
3.一种是无子树,或者只有一个子树,这种情况比较好处理,得到该结点的父结点,让父结点指向空或者改结点的子结点即可
4.第二种情况比较复杂,该结点有左右子树,我们沿该结点的左子树查找到它的左子树中的最大值,将这个结点称为max结点,用max结点的值替换要删除的结点的值,然后删除掉max结点即可。为什么要这么做,因为max结点必然在树的边缘(满足左子树小于根小于右子树的情况下),所以最多只有一颗子树,能有效的避免有两个子树无法处理的问题。


二叉树的删除就暂时总结这么多,代码还没有调好《每天一点数据结构之二叉树的查找和删除》,就不上代码了~ 关于二叉树的删除以后再继续学习~

    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/lavender21/article/details/51508365
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞