ツリーオファー安全性を証明するために - 再帰

トピックツリー下部構造を説明

二つのバイナリ入力はA、B、BはAさんを下部ではないと判断されます。(詩:私たちは、空のツリーは任意のサブ構造ツリーではありません同意しました)

思考

バックトラッキング

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def HasSubtree(self, pRoot1, pRoot2):
        if not (pRoot2 and pRoot1) :
            return False
        if pRoot2.val == pRoot1.val:
            left = True
            right = True
            if pRoot2.left:
                if not self.HasSubtree(pRoot1.left, pRoot2.left):
                    left = False
            if pRoot2.right:
                if not self.HasSubtree(pRoot1.right, pRoot2.right):
                    right = False
            if not (left and right):
                if not (self.HasSubtree(pRoot1.left,pRoot2) or self.HasSubtree(pRoot1.right,pRoot2)):
                    return False
        else:
            if self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2):
                return True
            else:
                return False
        return True

 

トピック2

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

説明を入力します。

バイナリツリーの定義をミラーリング:バイナリソース
    	    8 
    	   / \ 
    	  610 
    	 / \ / \ 
    	57911 
    	ミラーバイナリ
    	    8 
    	   / \ 
    	  106 
    	 / \ / \ 
    	11975

思考

再帰

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回镜像树的根节点
    def Mirror(self, root):
        if root:
            temp = root.right
            root.right = root.left
            root.left = temp
            self.Mirror(root.left)
            self.Mirror(root.right)
        return root

 

公開された82元の記事 ウォンの賞賛2 ビュー4369

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104741789