`
xitonga
  • 浏览: 597854 次
文章分类
社区版块
存档分类
最新评论

二叉树镜像

 
阅读更多
/******************************************************************
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
******************************************************************/
#include<stdio.h>

struct BinaryTreeNode
{
	int m_nValue;
	BinaryTreeNode* m_pLeft;
	BinaryTreeNode* m_pRight;
};

BinaryTreeNode* createBinaryTreeNode(int value)
{
	BinaryTreeNode* pNewNode = new BinaryTreeNode();
	pNewNode->m_nValue = value;
	pNewNode->m_pLeft = NULL;
	pNewNode->m_pRight = NULL;
	return pNewNode;
}
void connectBinaryTreeNode(BinaryTreeNode* pParent,BinaryTreeNode* pLeftChild,
						   BinaryTreeNode* pRightChild)
{
	if(!pParent)
		return;

	pParent->m_pLeft = pLeftChild;
	pParent->m_pRight = pRightChild;
}
void ptintBinaryTreeNode(BinaryTreeNode* pNode)
{
	if(pNode)
	{
		printf("Node's valuse is %d\n",pNode->m_nValue);
		if(pNode->m_pLeft)
			printf("Node's left child value is %d\n",pNode->m_pLeft->m_nValue);
		else
			printf("Node's left child value is NULL\n");
		if(pNode->m_pRight)
			printf("Node's right child value is %d\n",pNode->m_pRight->m_nValue);
		else
			printf("Node's right child value is NULL\n");
	}
	else
	{
		printf("Node's valuse is NULL\n");
	}
}
void printTree(BinaryTreeNode* pRoot)
{
	if(pRoot)
	{
		ptintBinaryTreeNode(pRoot);
	if(pRoot->m_pLeft)
		printTree(pRoot->m_pLeft);
	if(pRoot->m_pRight)
		printTree(pRoot->m_pRight);
	}
}

void mirrorOfBinaryTree(BinaryTreeNode* pRoot)
{
	if(pRoot == NULL)
		return;
	
	BinaryTreeNode* pNode;
	pNode = pRoot->m_pLeft;
	pRoot->m_pLeft = pRoot->m_pRight;
	pRoot->m_pRight = pNode;
	
	if(pRoot->m_pLeft)
		mirrorOfBinaryTree(pRoot->m_pLeft);
	if(pRoot->m_pRight)
		mirrorOfBinaryTree(pRoot->m_pRight);

}
//单元测试
void test1()
{
	BinaryTreeNode* pNode1 = createBinaryTreeNode(8);
	BinaryTreeNode* pNode2 = createBinaryTreeNode(6);
	BinaryTreeNode* pNode3 = createBinaryTreeNode(10);
	BinaryTreeNode* pNode4 = createBinaryTreeNode(5);
	BinaryTreeNode* pNode5 = createBinaryTreeNode(7);
	BinaryTreeNode* pNode6 = createBinaryTreeNode(9);
	BinaryTreeNode* pNode7 = createBinaryTreeNode(11);

	connectBinaryTreeNode(pNode1,pNode2,pNode3);
	connectBinaryTreeNode(pNode2,pNode4,pNode5);
	connectBinaryTreeNode(pNode3,pNode6,pNode7);

	mirrorOfBinaryTree(pNode1);
	printTree(pNode1);

}

int main()
{
	test1();
	return 0;
}

void MirrorIteratively(BinaryTreeNode* pRoot)
{
    if(pRoot == NULL)
        return;

    std::stack<BinaryTreeNode*> stackTreeNode;
    stackTreeNode.push(pRoot);

    while(stackTreeNode.size() > 0)
    {
        BinaryTreeNode *pNode = stackTreeNode.top();
        stackTreeNode.pop();

        BinaryTreeNode *pTemp = pNode->m_pLeft;
        pNode->m_pLeft = pNode->m_pRight;
        pNode->m_pRight = pTemp;

        if(pNode->m_pLeft)
            stackTreeNode.push(pNode->m_pLeft);

        if(pNode->m_pRight)
            stackTreeNode.push(pNode->m_pRight);
    }
}

==参考剑指offer


分享到:
评论

相关推荐

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

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

    数据结构二叉树镜像题目

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

    镜像二叉树

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

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

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

    PHP获取二叉树镜像的方法

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

    二叉树镜像1

    二叉树的镜像操作是将一棵二叉树的左右子树进行互换,从而得到一个与原树结构对称的新的二叉树。在给定的问题中,我们需要编写一个函数来实现这个功能。给定的代码是用C++语言实现的,其中`TreeNode`结构体代表了...

    二叉树的镜像

    求二叉树的镜像求

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

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

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

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

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

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

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

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

    二叉树的镜像1

    二叉树的镜像1

    二叉树的镜像.md

    二叉树的镜像.md

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

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

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

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

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

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

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

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

    wujie199#CS#27. 二叉树的镜像1

    27. 二叉树的镜像题目描述解题思路public void Mirror(TreeNode root) {private void swap(TreeNode

Global site tag (gtag.js) - Google Analytics