【BST二叉搜索树】常见笔试题

本文主要探讨BST二叉搜索树的面试重点,包括树的镜像翻转、判断是否为BST树、寻找指定区间元素、查找最近公共祖先、中序遍历倒数第k个节点、子树判断及根据遍历序列重建二叉树等关键问题。
摘要由CSDN通过智能技术生成

【1】树的镜像翻转

	//树的镜像翻转
	void mirror()
	{
   
		cout << "镜像翻转:";
		mirror(_root);	//调用以根节点进行镜像翻转
	}
	void mirror(BSTNode *node)
	{
   
		if (node == nullptr)
			return;

		BSTNode *ptmp = node->_left;	//交换左右孩子结点
		node->_left = node->_right;
		node->_right = ptmp;

		mirror(node->_left);	//递归实现左子树
		mirror(node->_right);	//递归实现右子树
	}

【2】判断一棵二叉树是不是一棵BST树

	//判断当前二叉树是不是BST树
    bool isBSTtree()
    {
   
    	BSTNode *pre = nullptr;
    	return isBSTree(_root, pre);
    }
    
	bool isBSTree(BSTNode *node,BSTNode *&pre)	
	{
   
		if (node == nullptr)
		{
   
			return true;
		}

		if (!isBSTree(node->_left, pre))
		{
   
			return false;
		}

		if (pre != nullptr)
		{
   
			if (node->_data < pre->_data)
			{
   
				return false;
			}
		}
		pre = node;
		return isBSTree(node->_right, pre);
	}

【3】寻找BST树指定区间的元素结果集

	//在当前BST树中,把满足区间[first, last]的所有元素找出来并打印
	void findAreaData(int first, int last)
	{
   
		vector<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值