您的位置:首页 > 职场人生

二叉树面试题之二叉树镜像

2017-07-26 19:06 197 查看




首先分析,互为镜像,也就是说,一个节点的左右子树互相交换位置,因此采用递归的方法较为简单,且方便理解,即镜像步骤:

1).交换根结点的左右子树节点。

2).交换左子树(以图中10为例)的左右节点。

3).交换右子树(以图中6为例)的左右结点。



总结上面过程,一颗树的镜像过程:先前序遍历树的每个节点,如果遍历到节点有子节点,就交换它的两个子节点,当交换完所有非叶子节点的左右子节点之后,就得到了树的镜像。

实现如下:

struct BinaryTreeNode
{
int value;
BinaryTreeNode*_left;
BinaryTreeNode*_right;
};
void Mirror(BinaryTreeNode*Node)
{
if (Node == NULL)
return;
if (Node->_left == NULL&&Node->_right == NULL)
return;
BinaryTreeNode*tmp = Node->_left;
Node->_left = Node->_right;
Node->_right = tmp;
if (Node->_left)
Mirror(Node->_left);
if (Node->_right)
Mirror(Node->_right);
}
//以先序的方式构建二叉树,输入-1表示结点为空
void CreateBinaryTree(BinaryTreeNode *&pRoot)
{
int nNodeValue = 0;
cin >> nNodeValue;
if (-1 == nNodeValue)
{
return;
}
else
{
pRoot = new BinaryTreeNode();
pRoot->m_nValue = nNodeValue;
CreateBinaryTree(pRoot->m_pLeft);
CreateBinaryTree(pRoot->m_pRight);
}
}

void PrintInOrder(BinaryTreeNode *&pRoot)
{
if (pRoot != NULL)
{
PrintInOrder(pRoot->m_pLeft);
cout << pRoot->m_nValue << " ";
PrintInOrder(pRoot->m_pRight);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: