您的位置:首页 > 其它

软件设计艺术大师基本功--二叉树的镜像

2018-02-20 16:43 239 查看
Author: Frank
描述: 写一个函数,输入一个二叉树,输出它的镜像。
二叉树结点的定义:typedef struct BinaryTreeNode
{
int data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BinaryTreeNode;分析:如下图所示二叉树

      ----镜像后-->    

只需各个结点的左右指针互换即可(保证每个结点被操作一次),可以采用递归的方式:void MirrorRecursively(BinaryTreeNode* pHead)
{
if (NULL == pHead)
return;
if (NULL == pHead->left && NULL == pHead->right)
return;
BinaryTreeNode* pTemp = pHead->left;
pHead->left = pHead->right;
pHead->right = pTemp;
MirrorRecursively(pHead->left);
MirrorRecursively(pHead->right);
}
//循环方式,借助stack来实现, 只需要能够将各个结点的左右指针交换且每个结点仅仅被操作一次即可!应该也可以借助队列来实现
using namespace std;
#include <stack>
void MirrorBinaryTree_while(BinaryTreeNode* root)
{
if (root == NULL)
{
return;
}

stack<BinaryTreeNode*> stackTreeNode;
stackTreeNode.push(root);

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

BinaryTreeNode *Temp = parent->left;
parent->left = parent->right;
parent->right = Temp;

if (parent->left)
{
stackTreeNode.push(parent->left);
}

if (parent->right)
{
stackTreeNode.push(parent->right);
}

}
}


------------------------------代码测试------------------------------#include "stdafx.h"
#include "stdlib.h"

BinaryTreeNode* CreatBinaryNode(int data)
{
BinaryTreeNode* temp = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
temp->data = data; temp->left = NULL; temp->right = NULL;
return temp;
}

void PrintBinaryTree(BinaryTreeNode* pHead)
{
if (NULL == pHead)
return;
BinaryTreeNode* pNode = pHead;
printf("Node %d ", pNode->data);
PrintBinaryTree(pNode->left);
PrintBinaryTree(pNode->right);
}

int main()
{
BinaryTreeNode* pHead = NULL;
pHead = CreatBinaryNode(8);
pHead->left= CreatBinaryNode(6);
pHead->right = CreatBinaryNode(10);
pHead->left->left= CreatBinaryNode(5);
pHead->left->right = CreatBinaryNode(7);
pHead->right->left= CreatBinaryNode(9);
pHead->right->right = CreatBinaryNode(11);
PrintBinaryTree(pHead);
printf("----------------------------\n");
MirrorRecursively(pHead);
PrintBinaryTree(pHead);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: