二叉查找树镜像,镜像对称二叉树
BM33二叉树的镜像描述了给定二叉树的操作,并将其转换为源二叉树的镜像。数据范围:二叉树中节点的数量,以及二叉树中每个节点的值。要求:空间复杂度。这个题目还有原位操作,就是空间复杂度和时间复杂度的求解。
例如:源二叉树
镜像二叉树
示例1输入:
{8,6,10,5,7,9,11}复制返回值:
{8,10,6,11,9,7,5}复制说明:
如题所示,例2输入:
{}复制返回值:
{}递归非常简单。镜像二叉树,只需要交换当前节点的左右节点,然后递归镜像左右节点。代码如下:
#包含位/标准数据。h
//https://www . now coder . com/practice/a 9d 0 ecbacef 9410 ca 97463 E4 a5 c 83 be 7?tpId=295 tags=title=难度=0判断状态=0 rp=0来源URL=/考试/oj
定义树结构
{
int val
struct TreeNode * left
struct TreeNode * right
TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}
};
TreeNode *Mirror(TreeNode *pRoot)
{
if (pRoot==nullptr)
{
退货证明;
}
std:swap(pRoot- left,pRoot-right);
镜子(pRoot-左);
镜子(pRoot-right);
退货证明;
}非递归实现非递归实现需要借助栈的特性。步骤如下:
1.检查空节点的状态。2.入站根节点。3.解开栈顶元素,交换栈顶左右指针的值,然后分别入站左右指针。4.重复上述过程,直到堆栈为空。注意:我们以前做前序遍历的时候是先把右节点放入栈中,再把左节点放入站中,这样就可以按照当前节点-左节点-右节点的顺序进行访问。但是这里只需要交换左右节点,不考虑访问顺序,所以堆叠顺序无所谓。
代码如下:
TreeNode *Mirror(TreeNode *pRoot)
{
if (pRoot==nullptr)
{
退货证明;
}
STD:stack TreeNode * s;
s . push(pRoot);
s . pop();
而(!s.empty()
{
auto node=s . top();
std:swap(节点左,节点右);
if (node- left!=nullptr)
{
s.push(节点向左);
}
如果(节点——对!=nullptr)
{
s.push(节点右移);
}
}
退货证明;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。