100 -106 无103 我不想写二叉树啊1啊啊啊啊

100,相同的树


前序遍历 先看结构再看值 用flag剪枝

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:


        flag = True
        def pretran(node1,node2):
            nonlocal flag
            if (node1 != None and node2== None) or (node1 == None and node2!= None):
                flag = False
                return flag
            if node1 == None and node2 == None:
                return 
            if node1.val != node2.val:
                flag = False
                return flag
            pretran(node1.left,node2.left)
            if flag:
                pretran(node1.right,node2.right)
            
        pretran(p,q)
        return flag

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/same-tree/solution/qian-xu-bian-li-xian-kan-jie-gou-zai-kan-m1f3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

101:对称二叉树 

被大部分人击败 好像不能从根节点开始  但我图省事了 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        flag = True
        def judge(node1,node2):
            nonlocal flag
            if (not node1) and (not node2):
                return flag
            if ( node1 and not node2) or ( node2 and not node1):
                flag = False
                return flag
            if node1.val == node2.val:
                judge(node1.left,node2.right)
                if flag:
                    judge(node1.right,node2.left)
            else:
                flag = False
            return flag
        return judge(root,root)

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/symmetric-tree/solution/you-shi-bei-da-bu-fen-ren-ji-bai-by-yizh-gqbu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

102: 层序遍历

记录当前层数长度和下层的长度

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root == None:
            return []
        que = []
        rel = []
        curlen = 1
        que.append(root)
        while que != []:
            curlev = []
            nextlen = 0
            for i in range(curlen):
                temp = que[0]
                curlev.append(temp.val)
                if temp.left:
                    nextlen += 1
                    que.append(temp.left)
                if temp.right:
                    nextlen += 1
                    que.append(temp.right)
                del que[0]
            curlen = nextlen
            rel.append(curlev[:])
        return rel


作者:yizhu-jia
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/ji-lu-dang-qian-ceng-shu-chang-du-he-xia-sq13/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

104  二叉树最大深度

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        def pre(root,depth,maxdep):
            if root:
                if depth>maxdep:
                    maxdep = depth
            else:
                return maxdep
            return max(pre(root.left,depth+1,maxdep),pre(root.right,depth+1,maxdep))
        return pre(root,1,0)

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/zhi-yao-shi-di-gui-kong-jian-jiu-hui-bei-tdmn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

105:前中 构造二叉树 

每次找到前序的第一个节点X在中序的位置I
I前面的 就是X左子树的中序 I后面的就是X右子树的中序
从前序第二个开始数I个 就是X左子树的前序 后面的是X右子树的中序
以此递归构建X的左右子树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        def build(prestart,preend,instart,inend):
            if prestart >= preend:
                return None
            i = 0
            for val in inorder[instart:inend]:
                if val == preorder[prestart]:
                    break
                i += 1
            root = TreeNode(val=preorder[prestart])
            root.left = build(prestart+1,prestart+i+1,instart,instart+i)
            root.right = build(prestart+i+1,preend,instart+i+1,inend)
            return root
        return build(0,len(preorder),0,len(inorder))

作者:yizhu-jia
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/di-gui-zao-shu-by-yizhu-jia-m3h2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

106  中后构造二叉树 

跟上题一样 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        def build(poststart,postend,instart,inend):
            if poststart >= postend:
                return None
            i = 0
            for val in inorder[instart:inend]:
                if val == postorder[postend-1]:
                    break
                i += 1
            root = TreeNode(val=postorder[postend-1])
            root.left = build(poststart,poststart+i,instart,instart+i)
            root.right = build(poststart+i,postend-1,instart+i+1,inend)
            return root
        return build(0,len(postorder),0,len(inorder))


作者:yizhu-jia
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/solution/shi-jian-zai-ci-da-shi-bai-wo-yao-qu-kan-wdkg/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2021-12-06 14:36  yi术家  阅读(82)  评论(0编辑  收藏  举报