二叉搜索树(递归)

8 篇文章 0 订阅
8 篇文章 0 订阅

二叉搜索树(递归)

#include <iostream>
#include<random>

using namespace std;
class BST
{
	struct Node {
		int data;
		struct Node *left, *right;
		Node(int val) :data(val), left(nullptr), right(nullptr) {}
	};
	struct Node* root;


	void insert(Node *&node,int key)
	{

		if (node == nullptr)
		{
			node = new Node(key);

		}
		else if (node->data <= key)
		{
			
			insert(node->right,key);

		}
		else if (node->data > key)
		{
			insert(node->left, key);
		}

	}

	void print(struct Node *node)
	{
		if (node != nullptr)
		{
			print(node->left);
			cout << node->data << " ";
			print(node->right);
		}
	}


	bool find(struct Node *node,int value)
	{
		if (node == nullptr)
		{
			return false;
		}
		else if (node->data == value)
		{
			return true;

		}
		else if (node->data < value)
		{
			return find(node->right, value);
		}
		else
		{
			return find(node->left, value);
		}


	}	
	
	void levelsum(struct Node *node, int level, int sum[])
	{
		if (node == nullptr)
		{
			return;
		}
		else
		{
			sum[level] += node->data;
			levelsum(node->left, level + 1, sum);
			levelsum(node->right, level + 1, sum);
		}

	}
	void Destroy(struct Node *node)
	{
		if (node == nullptr)
		{
			return;

		}
		else
		{
			Destroy(node->left);
			Destroy(node->right);
			cout << "Destroy node: " << node->data << endl;
			delete node;

		}
	
	
	}
	int GetLevel(struct Node *node)
	{
		int leftnode = 0, rightnode = 0;
		if (node == nullptr)
		{
			return 0;
		}
		leftnode = GetLevel(node->left);
		rightnode = GetLevel(node->right);
		return leftnode > rightnode ? leftnode + 1 : rightnode + 1;
	}

	int MaxLevelSumBST(struct Node *node, int level)
	{
		int *sum = new int[level];
		for (int i = 0; i < level; i++)
		{
			sum[i] = 0;
		}
		levelsum(node, 0, sum);
		cout << "All sum of each level is shown as below:" << endl;
		for (int i = 0; i < level; i++)
		{
			cout << sum[i] << endl;

		}
		int maxnum = sum[0];
		for (int i = 0; i < level; i++)
		{
			if (maxnum <= sum[i])
			{
				maxnum = sum[i];
			}

		}
		delete[] sum;
		return maxnum;
	}


public:
	BST() {}
	~BST() { Destroy(root); }
	bool findnode(int value)
	{
	
		return find(root, value);
	
	}
	void insertnode(int value)
	{
		insert(root, value);

	}
	void print_tree()
	{
		print(root);
		cout << endl;
	}



	int GetallLevel()
	{
		return GetLevel(root);
	
	}



	int MaxLevelSum()
	{
		int level= GetallLevel();
		return MaxLevelSumBST(root, level);
	}

};

int main()
{
	BST bsttree;
	srand(0);
	//int sum[3] = {0};
	/*
			  5
		   /     \
		  3       7
		 /  \    /  \
	   2     4  6    8
	bsttree.insertnode(5);
	bsttree.insertnode(3);
	bsttree.insertnode(2);
	bsttree.insertnode(4);
	bsttree.insertnode(7);
	bsttree.insertnode(6);
	bsttree.insertnode(8);
*/
	cout << "Random number insert: ";
	for (int i = 0; i < 62; i++)
	{
		int number = rand() % 100;
		bsttree.insertnode(number);
		cout << number << " ";
	}
	cout << endl << endl;
	cout << "All nodes of the BST are: ";
	bsttree.print_tree();
	cout << endl;
	int number = 36;
	cout << "Does value " << number << " in the BST?: " << boolalpha << bsttree.findnode(number) << endl;
	number = 35;
	cout << "Does value " << number << " in the BST?: " << boolalpha << bsttree.findnode(number) << endl;
	cout << "-----------------------------------------------------------------------" << endl;
	cout << "The maximum sum from all level is: " << bsttree.MaxLevelSum() << endl;
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值