题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
题目分析:在牛课网看到这道题,一开始果断想到了递归调用,提交答案后提示堆栈溢出,虽然递归比较方便实现,但当二叉树的深度比较大时,使用递归的方式会消耗非常大的空间,可能造成堆栈溢出。因此,想到了利用中序遍历。
二叉树的非递归中序遍历:以题目示例中的二叉树为例,非递归中序遍历借助于栈实现,实现过程如下:
首先定义一个指针p指向二叉树的根节点
1)判断指针为空是否成立,不成立判断堆是否为空,不为空执行2,否则结束;
2)若p不为空,则将指针p(结点地址)入栈,令p指向p的左子结点,执行1;
3)若p为空,从栈中取出父节点,打印父节点的值,令p指向右子结点,执行1。
对比要实现二叉树的镜像翻转,则每一个父节点的两个子节点都需要交换(设叶子结点也有子节点,两个子节点均为空),因此想到将整个树遍历一遍,将所有结点入栈,在结点