二叉查找树的镜像

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于

右子树的结点。用递归和循环两种方法完成树的镜像转换。

例如输入:

8

/ \

6 10

/\ /\

5 7 9 11

输出:

8

/ \

10 6

/\ /\

11 9 7 5

思路:这也是一个递归的题目,对于当前节点,如果不是NULL节点或者叶子节点,那么只需要交换左右子节点即可。这样再次递归调用左右子树。

void ConvertMirror(BinTree* root)
{
	if(root == NULL ||(root->left == NULL &&root->right == NULL))
		return ;
	BinTree* temp = NULL;
	temp = root->left;
	root->left = root->right;
	root->right = temp;
	if(root->left != NULL)
		ConvertMirror(root->left);
	if(root->right != NULL)
		ConvertMirror(root->right);
}

当然也可以不使用递归,使用栈空间来辅助,从栈顶取出节点,交换左右节点,如果左右节点不为空,压入栈

void ConvertMirrorNoIter(BinTree* root)
{
	stack<BinTree*> st;
	if(root == NULL)
		return ;
	st.push(root);
	BinTree* temp;
	while(!st.empty())
	{
		temp = st.top();
		st.pop();
		BinTree* cur = temp->left;
		temp->left = temp->right;
		temp->right = cur;

		if(temp->left != NULL)
			st.push(temp->left);

		if(temp->right != NULL)
			st.push(temp->right);
	}
}
时间: 2024-10-10 04:07:45

二叉查找树的镜像的相关文章

平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】

平衡树初阶——AVL平衡二叉查找树 一.什么是二叉树 1. 什么是树. 计算机科学里面的树本质是一个树状图.树首先是一个有向无环图,由根节点指向子结点.但是不严格的说,我们也研究无向树.所谓无向树就是将有向树的所有边看成无向边形成的树状图.树是一种递归的数据结构,所以我们研究树也是按照递归的方式去研究的. 2.什么是二叉树. 我们给出二叉树的递归定义如下: (1)空树是一个二叉树. (2)单个节点是一个二叉树. (3)如果一棵树中,以它的左右子节点为根形成的子树都是二叉树,那么这棵树本身也是二叉

图解数据结构(7)——二叉查找树及平衡二叉查找树(一共14篇)

这篇将是最有难度和挑战性的一篇,做好心理准备!十.二叉查找树(BST)前一篇介绍了树,却未介绍树有什么用.但就算我不说,你也能想得到,看我们Windows的目录结构,其实就是树形的,一个典型的分类应用.当然除了分类,树还有别的作用,我们可以利用树建立一个非常便于查找取值又非常便于插入删除的数据结构,这就是马上要提到的二叉查找树(Binary Search Tree),这种二叉树有个特点:对任意节点而言,左子(当然了,存在的话)的值总是小于本身,而右子(存在的话)的值总是大于本身. 这种特性使得我

平衡二叉查找树:红黑树

红黑树的定义 红黑树是满足如下条件的二叉树: (1)每个结点都有颜色标记,要么是黑色,要么是红色 (2)根结点是黑色的 (3)叶子结点是黑色的(按<算法导论>和其他文献的说法是,这里的叶子结点指的是空结点) (4)红色结点的孩子必须是黑色的 (5)从根结点到每一个叶子结点的路径上,黑色结点的个数相同.(有部分文献里"根结点"说成"任意结点",其实这种说法是一样的,因为任意子树也是一颗二叉树,如果它的根是黑色的,那么它本身也是一颗红黑树,如果它的根是红色的

制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统

转自网络,供学习记录使用,红色部分是我实验时,这篇文章和网站稍有出入的地方. 目的:制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统 在http://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/quickstart/zynq(姑且把这个链接成为链接1吧)链接中找到 图1 点击绿色字体的链接,下载镜像原始文件.这里有不同时期的版本,本说明中选择 图2 下载的原始文件为:2014_R2-

docker run常用命令及 解决 ubuntu镜像无法识别 ifconfig ping 命令

docker run -it     docker 前端启动 container容器           -d             后端启动 container容器           -p             固定端口映射            -P             不固定端口映射           --name         给生成的容器起名字docker ps:默认显示正在运行的container       ps -a 显示所有的container容器docker r

Maven的国内镜像(解决jar下载过慢)

Maven简介 maven作为一个项目管理工具确实非常好用,结果在使用时候,你会发现下载jar速度不如自己在网上下载.之前oschina的中央仓库可用,现在oschina的maven服务器关了,只能拿国内镜像来替代.在网上发现阿里云公开了一个中央仓库,就顺手写下来了,方便以后使用. 修改Maven目录中的conf/settings.xml 找到mirrors节点,添加到节点下 1.这是阿里云仓库 <mirror> <id>alimaven</id> <name&g

【Docker常见问题1】&#8203;下载docker镜像,如何下载指定的应用版本?

举例:如何下载postgres版本9.2? 步骤1:访问官网 https://hub.docker.com/ 步骤2:搜索postgres镜像 搜索框,输入postgres进行搜索 步骤3:查看已发布的版本 点击进入postgres页面,并点击tags,可看到已发布的版本 步骤4:选择一个版本下载 下载版本9.2 sudo docker pull postgres:9.2 或下载最新版本 sudo docker pull postgres:latest

oracle2c-r2(12.2.0.1) 的镜像

docker- 构建 oracle2c-r2(12.2.0.1) 的镜像 需求 由于公司的数据库需要使用新的oracle版本(12c-r2 -->12.2.0.1),从之前的oracle11g迁移到12c.所以,便有了我们今天的内容. 首先,我们就先来介绍一下如何构建oracle12c的镜像(docker image). 如果大家有使用的需求而又不是正式的项目,可以直接到docker hub 上面 pull 一个别人家的.在这里附上链接:https://hub.docker.com/r/mrit

Maven更新慢怎么办?试试换成国内镜像

汗一个,最近刚找到方法.以前竟然忍受那么慢的更新速度. 解决办法是修改配置文件 apache-maven-3.3.3\conf\settings.xml 我这边主要做了三个地方的修改 1.仓库保存位置(默认是C盘),修改如下图 2.添加镜像站点.找到 mirrors标签.修改如下图: 3.修改默认JDK版本 完整的文档settings.xml如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!--