[画像]パイソン18オファーバイナリツリーの実装を受賞します

タイトル説明


所与のバイナリツリーの動作は、バイナリツリーは、ソース画像に変換されます。
説明を入力します。

バイナリツリーのミラーリング定義:バイナリソース

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

問題解決のためのアイデア


我々は、それが唯一のより多くの周りになり、究極のアイデアは、それが実行されるかを確認するステップによって、我々は再帰行くステップを考えてはいけません再帰的数学的帰納法であることを覚えていることがあります。、我々は最初のサブ質問は完璧取引されていることを前提と方法を考え、心に留めておく私は同じことを扱っ何を究極の質問、治療と最終サブ問題に対処する必要がありますが、問題の規模は1でなければなりません狭帯域。最後の条件は、再帰にエクスポートすることができます

この質問のために、最初の左と右のサブツリーのルートがうまく処理されていることを前提とし、左の部分木自体は、右部分木自体をミラーリング、ミラーリングされた、その後、最後のステップは、サブツリーについて、問題が解決されて交換することです。私はする必要があるのでroot.leftとroot.right交換ができます。次の再帰を入力し、それがサブ問題に対処することです。同じサブ問題と根の取り扱いが、問題のサイズを小さくするために、我々は唯一の状況、root.rightは何をすることができますが何であるかをroot.leftを考慮する必要があります。

コード


# Python解法:
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None


class Solution:
    def Mirror(self, root):
        # write code here
        # 为空则结束
        if not root:
            return root
        
        # 假设root两边的子树自己都已经翻转成功了,那么只需要再将左右子树互换一下就成功了
        # 交换root的左右子树
        node = root.left
        root.left = root.right
        root.right = node
        
        # 左右子树翻转自己去处理就行了,我们规定每个子树的root都跟最终的root处理方式一样即可
        self.Mirror(root.left)
        
        self.Mirror(root.right)
        
        return root
公開された99元の記事 ウォンの賞賛6 ビュー3987

おすすめ

転載: blog.csdn.net/weixin_42247922/article/details/103939930