刷题18 二叉树的镜像

描述:  操作给定的二叉树,将其变换为源二叉树的镜像。

二叉树的镜像示例:

       源二叉树
    	    8
    	   /      	  6   10
    	 / \  /     	5  7 9 11
    	镜像二叉树
    	    8
    	   /      	  10   6
    	 / \  /     	11 9 7  5

很容易的想到了递归:

 1 /*
 2 struct TreeNode {
 3     int val;
 4     struct TreeNode *left;
 5     struct TreeNode *right;
 6     TreeNode(int x) :
 7             val(x), left(NULL), right(NULL) {
 8     }
 9 };*/
10 class Solution {
11 public:
12     void Mirror(TreeNode *pRoot) {
13         if(!pRoot)
14             return;
15         if(!pRoot->left && !pRoot->right)
16             return;
17         TreeNode *pTemp = pRoot->left;
18         pRoot->left = pRoot->right;
19         pRoot->right = pTemp;
20         Mirror(pRoot->left);
21         Mirror(pRoot->right);
22     }
23 };

接下来再用非递归栈实现一次:

 1 /*
 2 struct TreeNode {
 3     int val;
 4     struct TreeNode *left;
 5     struct TreeNode *right;
 6     TreeNode(int x) :
 7             val(x), left(NULL), right(NULL) {
 8     }
 9 };*/
10 class Solution {
11 public:
12     void Mirror(TreeNode *pRoot) {
13         if(!pRoot)
14             return;
15         stack<TreeNode*> pStack;
16         pStack.push(pRoot);
17         while(!pStack.empty())
18         {
19             TreeNode *cur = pStack.top();
20             pStack.pop();
21             if(cur->left || cur->right)
22             {
23                 TreeNode *temp = cur->left;
24                 cur->left = cur->right;
25                 cur->right = temp;
26             }
27             if(cur->left)
28                 pStack.push(cur->left);
29             if(cur->right)
30                 pStack.push(cur->right);
31         }
32     }
33 };

原文地址:https://www.cnblogs.com/purehol/p/8120040.html

时间: 2024-07-30 21:23:10

刷题18 二叉树的镜像的相关文章

18 二叉树的镜像

题目描述:操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 public TreeNode(int val) { 7 this.val = val; 8 } 9 } 10

剑指Offer 18. 二叉树的镜像 (二叉树)

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 题目地址 https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=13&tqId=11171&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-i

《剑指offer》第二十七题(二叉树的镜像)

// 面试题27:二叉树的镜像 // 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. #include <iostream> #include "BinaryTree.h" #include <stack> void MirrorRecursively(BinaryTreeNode *pNode)//递归算法(自下而上) { if ((pNode == nullptr) || (pNode->m_pLeft == nullptr &&a

LinCode 刷题 之二叉树最小深度

http://www.lintcode.com/zh-cn/problem/minimum-depth-of-binary-tree/  题目描述信息 二叉树的结构定义如下: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.lef

[剑指Offer] 18.二叉树的镜像

[思路1]递归,所有孩子交换再分别递归左右子树 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution { 11 public: 12 void Mirror(TreeNode *pRoot) { 13 if(p

leecode刷题(24)-- 翻转二叉树

leecode刷题(24)-- 翻转二叉树 翻转二叉树 翻转一棵二叉树. 示例: 输入: 4 / 2 7 / \ / 1 3 6 9 输出: 4 / 7 2 / \ / 9 6 3 1 备注: 这个问题是受到 Max Howell的 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了. 思路 二叉树问题,我们首先要想到的使用递归的方式来解决,有了这个思路,处理这道问题就很简单了:先互换根节点的左右节点,然

剑指offer第十七题 二叉树的镜像

操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 7 public TreeNode(int val) { 8 this.val = val; 9 10 } 1

剑指offer 18. 面试思路 二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 解题思路:使用递归将左右结点交换 代码如下: public class Mirror { public void Mirror(TreeNode root) { if (root==null) { root=null; }else { //交换左右结点 TreeNode node=root.le

LeetCode日常刷题

[1] 125. 验证回文串[简单] 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true 示例 2: 输入: "race a car" 输出: false class Solution: def isPalindrome(self, s: str) -> bool: # 回文串,