二叉树面试题之二叉树镜像
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);
}
}
相关文章推荐
- 面试题19:镜像二叉树
- 剑指offer-面试题19-二叉树的镜像
- 面试题19 :二叉树的镜像
- 面试题:二叉树的镜像
- 【剑指offer】面试题27:二叉树的镜像
- 剑指offer--面试题19:二叉树的镜像--Java实现
- 剑指offer 面试题19 二叉树的镜像
- 剑指offer面试题19 二叉树的镜像
- 剑指Offer之面试题19:二叉树的镜像
- 【剑指Offer学习】【面试题19 :二叉树的镜像】
- 剑指Offer:面试题19 二叉树的镜像
- 二叉树经典面试题1~求二叉树的镜像
- 剑指offer面试题19——二叉树的镜像
- 剑指Offer面试题:18.二叉树的镜像
- 【面试题十九】二叉树的镜像
- 面试题(二十七) 二叉树的镜像
- 数据结构面试题/求一棵二叉树的镜像
- 剑指Offer面试题18树的子结构(递归),面试题19二叉树的镜像(递归和非递归用栈)
- 剑指offer 面试题19 二叉树镜像
- 剑指offer-第四章解决面试题的思路(二叉树的镜像)