剑指offer:二叉树的镜像

题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:
```源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5

class TreeNode:
def init(self, x):
self.val = x
self.left = None
self.right = None

class Solution:

返回镜像树的根节点

def Mirror(self, root):
    if not root:
        return None
    # 如果当前节点不是叶子节点,那么交换它的左右节点
    if root.left or root.right:
        root.left, root.right = root.right, root.left

    # 对交换后的左右节点执行同样的操作
    root.left = self.Mirror(root.left)
    root.right = self.Mirror(root.right)

    return root

原文地址:https://blog.51cto.com/jayce1111/2383785

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

剑指offer:二叉树的镜像的相关文章

剑指Offer 二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 思路: 直接一个中间指针,递归,交换左右节点,节点为叶子节点的时候返回. AC代码: 1 class Solution { 2 public: 3 void Mirror(TreeNode *pRoot) { 4 if(pRoot==NULL) 5 return ; 6 7 TreeNode *

剑指offer——二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 代码实现(Java) 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

剑指offer二叉树的镜像python

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 思路 用递归的方法,根节点不变,左子右子交换即可,然后分别递归左右子 代码 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.rig

剑指offer——二叉树镜像

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

剑指Offer二叉树的深度

package Tree; import java.util.LinkedList; import java.util.Queue; /** * 二叉树的深度 * 输入一棵二叉树,求该树的深度. * 从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. */ public class Solution13 { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5, 6, 7

剑指:二叉树的镜像

题目描述 输入一个二叉树,将它变换为它的镜像. 输入树: 8 / 6 10 / \ / 5 7 9 11 [8,6,10,5,7,9,11,null,null,null,null,null,null,null,null] 输出树: 8 / 10 6 / \ / 11 9 7 5 [8,10,6,11,9,7,5,null,null,null,null,null,null,null,null] 解法 将根结点的左右孩子互换,之后递归左右孩子. /** * Definition for a bina

剑指offer 二叉树的下一个结点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路: 1)如果一个节点有右子树,那么它的下一个结点就是它的右子树中的最左子节点: 2)如果一个节点没有右子树,并且它还是它父节点的右子节点,我们可以沿着指向父节点的指针一直向上遍历,知道找到一个是它父节点的右子节点的左子节点的节点,就是第一个向右转的子部分根节点. /* struct TreeLinkNode { int val; struct Tr

剑指Offer17 二叉树的镜像

1 /************************************************************************* 2 > File Name: 17_MirrorOfBinaryTree.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 17时10分03秒 6 ******************************

剑指Offer——二叉树的下一个结点

题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 如果该结点存在右子树,那么返回右子树的最左结点. 如果该结点不存在右子树,那么如果该结点不是其父结点的最右结点,那么返回父结点:否则一直找到最大子树的最右结点是该结点,那么返回该最大子树的根结点的父结点. 代码: 1 /* 2 struct TreeLinkNode { 3 int val; 4 struct TreeLinkNode *le

剑指Offer——二叉树的深度

1.题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2.代码实现 public int TreeDepth(TreeNode root) { if (root == null) { return 0; } int left_len = TreeDepth(root.left); int right_len = TreeDepth(root.right); return Math.max(left_len, rig