java 二叉树镜像,将二叉树变换为源二叉树的镜像如何实现?思路和实现

你知道将一个叉树变换为源二叉树的镜像java要怎样才能实现吗?下面的文章要给大家分享的就是这个方面的内容。

一、题目

操作给定的二叉树,将该二叉树变换为源二叉树的镜像。

输入描述:

98e153db2c4dbb231315312bfe6c5dec.png

二、思路和实现

思路1

代码实现:public class Solution

{

public void Mirror(TreeNode root)

{

reverseTree(root);

}

private void reverseTree(TreeNode root)

{

//为空则结束

if (root == null)

{

return;

}

//假设root两边的子树自己都已经翻转成功了,那么只需要再将左右子树互换一下就成功了

//交换root的左右子树

swap(root);

//左右子树翻转自己去处理就行了,我们规定每个子树的root都跟最终的root处理方式一样即可

reverseTree(root.left);

reverseTree(root.right);

}

private void swap(TreeNode root)

{

TreeNode node = null;

node = root.left;

root.left = root.right;

root.right = node;

}

}

思路2:

先前序遍历这棵树的每个结点,假如遍历到的结点有子结点,那么就交换它的两个子节点,在交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像。

代码实现:public class TreeNode {

int val = 0;

TreeNode left = null;

TreeNode right = null;

public TreeNode(int val) {

this.val = val;

}

}

*/

public class Solution {

public void Mirror(TreeNode root) {

if(root == null)

return;

if(root.left == null && root.right == null)

return;

TreeNode pTemp = root.left;

root.left = root.right;

root.right = pTemp;

if(root.left != null)

Mirror(root.left);

if(root.right != null)

Mirror(root.right);

}

}

思路3:

非递归

代码实现:class Solution {

public:

void Mirror(TreeNode *pRoot) {

//递归实现

/*if(pRoot==NULL)

return;

TreeNode *ptemp=pRoot->left;

pRoot->left=pRoot->right;

pRoot->right=ptemp;

if(pRoot->left)

Mirror(pRoot->left);

if(pRoot->right)

Mirror(pRoot->right);*/

//非递归实现

if(pRoot==NULL)

return;

stack

 stackNode;

stackNode.push(pRoot);

while(stackNode.size()){

TreeNode* tree=stackNode.top();

stackNode.pop();

if(tree->left!=NULL || tree->right!=NULL){

TreeNode *ptemp=tree->left;

tree->left=tree->right;

tree->right=ptemp;

}

if(tree->left)

stackNode.push(tree->left);

if(tree->right)

stackNode.push(tree->right);

}

}

};

以上的思路和实现方式你都了解了吗?以上内容仅供参考哦。

更多java实例,请继续关注奇Q工具网的java实例专栏了解吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值