`
u010815305
  • 浏览: 30506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

二叉树的镜像

 
阅读更多

题目:

请完成一个函数,输入 一个二叉树,该函数输出她的镜像。

求一棵树的镜像的过程:

先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换他的两个子结点,当交换完所有的非叶子节点的左右子结点之后,就

得到树的镜像。

#include<stdio.h>
#include<stdlib.h>

struct BinaryTreeNode
{
	int      m_nValue;
	BinaryTreeNode*  m_pLeft;
	BinaryTreeNode*  m_pRight;
}; 
void mirrorRecursively(BinaryTreeNode* pNode)
{
	if((pNode==NULL)||(pNode->m_pLeft==NULL&&pNode->m_pRight))
		return ;
	BinaryTreeNode* pTemp= pNode->m_pLeft;
	pNode->m_pLeft=pNode->m_pRight;
	pNode->m_pRight=pTemp;
	
	
	if(pNode->m_pLeft)
		mirrorRecursively(pNode->m_pLeft);
	if(pNode->m_pRight)
		mirrorRecursively(pNode->m_pRight);
} 

BinaryTreeNode* createTree(BinaryTreeNode* pRoot)
{
	int data;
	scanf("%d",&data);
	
	if(data!=-1)
	{
		pRoot=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode*));
		if(pRoot==NULL)
			return NULL;
		pRoot->m_nValue=data;
		pRoot->m_pLeft=createTree(pRoot->m_pLeft);
		pRoot->m_pRight=createTree(pRoot->m_pRight);
		
		return pRoot;
	}
	return NULL;
}
void printTree(BinaryTreeNode* pNode)
{
	if(pNode==NULL)
		return ;
	printf("%d\n",pNode->m_nValue);
	printTree(pNode->m_pLeft);
	printTree(pNode->m_pRight); 
}
int main()
{
	BinaryTreeNode* pRoot;
	BinaryTreeNode* pNode=createTree(pRoot);
	
	mirrorRecursively(pNode);
	
	printTree(pNode);
	
	return 0;
}


结果:

分享到:
评论

相关推荐

    C++基于递归和非递归算法求二叉树镜像的方法

    基于递归和非递归算法求二叉树镜像的方法 本文主要介绍了C++语言中基于递归和非递归算法求二叉树镜像的方法。二叉树镜像是指将二叉树的左右子树交换,使其成为镜像的过程。本文将详细讲述递归和非递归算法的实现与...

    python-剑指offer第18题二叉树镜像

    python python_剑指offer第18题二叉树镜像

    二叉树镜像1

    本文将围绕二叉树镜像的实现展开讨论,首先通过定义二叉树节点结构体`TreeNode`,继而构建`Solution`类,内含两个函数`dfs`和`mirrorTree`。我们将深入探讨这两个函数如何协同工作,实现二叉树的镜像转换,以及它们...

    数据结构二叉树镜像题目

    镜像对称的判断,主要是判断根节点的左右子树数据域是否相等,第二部分就是递归判断左子树的左子树与右子树的右子树以及右子树的左子树和左子树的右子树是否相等。

    镜像二叉树

    镜像二叉树是一种特殊的二叉树结构,其特点是对称性体现在左右子树之间。在常规二叉树中,左子树的节点值通常小于父节点,而右子树的节点值则大于父节点。而在镜像二叉树中,这种关系正好相反:左子树的节点值大于或...

    C++ 二叉树的镜像实例详解

    本文主要介绍了 C++ 二叉树的镜像实例详解的相关知识点,包括二叉树镜像的定义、递归实现和非递归实现。 一、 二叉树镜像的定义 二叉树镜像是将一个二叉树的左右子树调换位置,从根节点的左右子树进行交换,然后以...

    PHP获取二叉树镜像的方法

    在特定场景下,我们可能需要将一个二叉树转换为其镜像,即交换所有节点的左右子节点,这就是所谓的“二叉树镜像”。 本篇将详细解释如何使用PHP实现这个功能,并重点介绍一种非递归的方法,即利用队列进行二叉树的...

    Python二叉树的镜像转换实现方法示例

    在二叉树的数据结构中,镜像转换是一个重要的操作,它涉及到将一棵二叉树的左右子树交换位置,使得原来的左子树变成右子树,原来的右子树变成左子树。这种转换通常用于解决对称性或镜像性质的问题。在Python中,有...

    MachineLP#CodeFun#SMOffer018--二叉树的镜像1

    输入描述:二叉树的镜像定义:源二叉树镜像二叉树解题思路前序遍历这棵树的每个节点,如果遍历到的节点有子节点,则交换它的两个子节点。void Mirror(Tree

    js代码-200602-二叉树的镜像

    总结来说,"js代码-200602-二叉树的镜像"是一个关于JavaScript实现二叉树镜像操作的实例。这个项目涉及了二叉树的基本概念,包括节点、叶子节点、非叶子节点、左子节点和右子节点,以及如何通过递归方法实现二叉树的...

    二叉树的镜像1

    二叉树的镜像操作是将原树的左右子节点互换,使得原来的左子节点变成镜像后的右子节点,原来的右子节点变成镜像后的左子节点。这个过程相当于我们在平面镜前展示一棵二叉树,然后看到的反射图像就是它的镜像。 题目...

    剑指offer算法实现java版——面试题19二叉树的镜像

    我们可以画一棵二叉树,然后画出该二叉树的镜像。画完图之后我们会发现,所谓“二叉树的镜像”就是把二叉树中所有子树的左孩子和右孩子进行交换。因此需要遍历二叉树所有的结点,在遍历的同时交换非叶子结点的左右...

    二叉树的镜像.md

    二叉树的镜像.md

    Java编程求二叉树的镜像两种方法介绍

    【二叉树镜像】是二叉树操作中的一种常见问题,主要涉及到对二叉树结构的变换。在镜像操作中,二叉树的左右子节点被互换,形成原本树的对称结构。本篇文章主要介绍了两种方法来实现Java编程中的二叉树镜像:递归和非...

    Rosevil1874#CS_Python_Notes#58对称的二叉树2

    1. 复制二叉树 2. 求二叉树镜像 3. 判断镜像和原树是否相等

    MangoDowner#clear-leetcode#剑指Offer27.二叉树的镜像1

    剑指 Offer 27. 二叉树的镜像原题链接:剑指 Offer 27. 二叉树的镜像递归法解题思路要实现二叉树的镜像反转,只需交换二叉树中所有结点的左右孩子即

    java基础面试题二叉树的镜像

    java基础面试题二叉树的镜像本资源系百度网盘分享地址

Global site tag (gtag.js) - Google Analytics