二叉排序树之创建和插入

 

 被要求动态建立二叉树,并切有序,然后中序输出,先把代码贴出来,再给予讲解。

// ConsoleApplication11.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

//#include "pch.h"
#include <iostream>
using namespace std;
class bitNode
{
public:
	int key;
	bitNode *lchild, *rchild;
	bitNode(){}
	bitNode(int data,bitNode *lchild=NULL,bitNode *rchild=NULL)    
	{
		key = data;
	}
};
 
class biTree
{
public:
	bitNode *root;
	biTree()
	{
		root = NULL;
	}

	bool search(int data)
	{
		bitNode *x = root;
		if (x== NULL)
		{
			return false;
		}

		while (x != NULL)
		{
			if (x->key == data)
				return true;
			else if (x->key > data)
				x = x->lchild;
			else
				x = x->rchild;
		}
		return false;
	}

	void insert(int data)
	{
		if (search(data)==false)
		{
			bitNode *s = root;
			if (s == NULL)
			{
				s = new bitNode(data);
				root = s;
				return;
			}

			bitNode *p = new bitNode();   //双亲节点
			
			while (s != NULL)
			{
				p = s;
				if (s->key > data)
					s = s->lchild;
				else
					s = s->rchild;
			}

			if (p->key>data)
			{
				p->lchild=new bitNode(data);
			}
			else
			{
				p->rchild=new bitNode(data);
			}
		}
	}

	void inOrderTraverse(bitNode *&T)
	{
		if (T)
		{
			inOrderTraverse(T->lchild);
			cout <<T->key << " ";
			inOrderTraverse(T->rchild);
		}
	}
};

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		int data;
		biTree tree;
		for (int i = 0; i < n; i++)
		{
			cin >> data;
			tree.insert(data);
		}
		tree.inOrderTraverse(tree.root);
		cout << endl;
		int m;
		cin >> m;
		for (int i = 0; i < m; i++)
		{
			cin >> data;
			tree.insert(data);
			tree.inOrderTraverse(tree.root);
			cout << endl;
		}
	}
}

这道题目最重要的点有两个,一个是查找我们想要插入的节点存不存在,第二个是如果这个节点

不存在的话,插入这个节点。

查找的时候分两类:一类是这个二叉表存在或不存在,当不存在的时候root==NULL,得返回false;

当这个表存在的时候查找这个节点就是一个个遍历,存在3种可能性,第一种这个要插入的data等于这个的节点的值,这时返回true,就是找到,当这个值大于节点的值的时候往右方向走,当这个值小于节点的值的时候往左边走,直到这个二叉树的末尾。

插入也分为两类情况,当这个表彻底就是空的,当这个表存在我们就得插入我们想要插入的值到适合的位置。

首先检查这个值存不存在,如果不存在,建立一个节点并这个节点成为根。

如果存在我们得找到适合位置的双亲节点,并这个要插入的data成为其左右节点之一。

发布了83 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Abudula__/article/details/84656495