剑指offer---18---(递归)(先序遍历)二叉树的镜像

https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011?tpId=13&tqId=11171&tPage=1&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

题意

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

分析

-----使用先序遍历的方式,先将两个子树交换位置,然后递归两个子树

交换两个子树的时候,因为子树的子树是连接在子树下面的,也就是说是相对固定不动的,交换的时候就会跟着交换。

代码

public class Solution {

public void Mirror(TreeNode root) {

if(root==null)return;

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

//先序交换两个子树

TreeNode temp = root.left;

root.left = root.right;

root.right = temp;

//如果两个子树不为空的话继续进行递归处理

if(root.left!=null)Mirror(root.left);

if(root.right!=null)Mirror(root.right);

}

}

原文地址:https://www.cnblogs.com/buptyuhanwen/p/9377081.html

时间: 2024-10-28 15:19:04

剑指offer---18---(递归)(先序遍历)二叉树的镜像的相关文章

【剑指offer】【树】27.二叉树的镜像

二叉树的镜像 递归法 递归的先序遍历二叉树,交换每个节点的左右子节点,即可生成二叉树的镜像 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNod

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

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

剑指offer (9) 递归和迭代 斐波那契数列

通常基于递归实现的代码比基于循环实现的代码要简洁很多 比如 二叉树遍历以及 二叉树的许多操作 递归由于是函数调用自身,每一次函数调用,都需要在内存栈中分配空间以保存参数.返回地址以及临时变量 而每个进程的栈容量是有限的,当递归调用的层级太多时,就会导致 调用栈溢出 递归有时伴随大量重复的计算, 二叉树遍历的递归操作不存在重复计算,因为每个结点的左右子树是严格区分开的 例如求解 斐波那契数列: 解题分析 int fib(int n) { assert(n >= 0); int prevTwo =

【剑指offer】递归循环两种方式反转链表

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25737023 本文分别用非递归和递归两种方式实现了链表的反转,在九度OJ上AC. 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数.输入的第二行包含n个整数t(0<=t<=1000000)

完全二叉树的链式存储结构的转化 &amp; 非递归中序遍历二叉树

1 /* 2 * 二叉树 3 * 4 * (将完全二叉树的数组形式改为链表形式) 5 * 6 * 1 7 * 2 3 8 * 4 5 6 7 9 * 8 10 * 11 */ 12 #include <iostream> 13 #define MAX 10 14 using namespace std; 15 16 typedef struct btnode{ 17 int data; 18 struct btnode * lchild; 19 struct btnode * rchild;

剑指offer 按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路: 1.有了之前层次遍历一行一行输出的经验,我们可以直接用一个变量记录行数,如果是奇数行,就将队列中的元素按顺序所有保存下来,如果是偶数行,就顺序保存到一个临时vector中,再逆序保存下来. 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct Tre

非递归后序遍历二叉树(1)

1 void postOrder3(BinTree *root) //非递归后序遍历 2 { 3 stack<BinTree*> s; 4 BinTree *cur; //当前结点 5 BinTree *pre=NULL; //前一次访问的结点 6 s.push(root); 7 while(!s.empty()) 8 { 9 cur=s.top(); 10 if((cur->lchild==NULL&&cur->rchild==NULL)|| 11 (pre!=N

剑指offer--二叉树的后序遍历

思路:对于一个二叉树的后序遍历序列来说,最后一个数一定是根节点,然后前面的数中,从最开始到第一个大于根节点的数都是左子树中的数,而后面到倒数第二个数应该都是大于根节点的,是右子树,如果后面的数中有小于根节点的,那么说明这个序列不是二叉搜索树的后序遍历序列. public class JudgeHouxubainli { public static void main(String[] args) { int[] array = {4,8,6,12,16,14,10}; boolean resul

剑指offer 18:树的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 验证B是不是A的子树,直觉做法,按照任意次序遍历A树,一旦出现和B树根节点相同的子节点,就将以此节点为根的子树与B树相比较,满足则查找成功,否则查找失败.树的先序遍历最为直观,此处以先序遍历为例,给出C++实现代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode

剑指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