zoukankan      html  css  js  c++  java
  • 剑指Offer-Python(21-25)

    21、栈的压入和弹出序列

    新建一个栈,将数组A压入栈中,当栈顶元素等于数组B时,就将其出栈,当循环结束时,判断栈是否为空,若为空则返回true.

    class Solution:
        def IsPopOrder(self, pushV, popV):
            # write code here
            if len(pushV) != len(popV):
                return False
            stack = []
            for i in pushV:
                stack.append(i)
                # print(stack[-1], popV[0])
                while len(stack) != 0 and stack[-1] == popV[0]:
                    # t = stack.pop()
                    stack.pop()
                    popV.pop(0)
                    # print(t)
            return len(stack) == 0
    
    
    s = Solution()
    push1 = [1, 2, 3, 4, 5]
    pop1 = [4, 5, 3, 2, 1]
    pop2 = [4, 5, 3, 1, 3]
    print(s.IsPopOrder(push1, pop1))  # true
    print(s.IsPopOrder(push1, pop2))  # False

    22、从上往下打印二叉树:

    从根节点开始依次把每一层的树节点值放入v中,同时把该树节点的子节点放入p中。按前面的操作,直到p为空。(层序遍历二叉树)

    class TreeNode:
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution:
        # 返回从上到下每个节点值列表,例:[1,2,3]
        def PrintFromTopToBottom(self, root):
            # write code here
            p = []
            v = []
            if root:
                p.append(root)
            while p:
                v.append(p[0].val)
                if p[0].left:
                    p.append(p[0].left)
                if p[0].right:
                    p.append(p[0].right)
                p.pop(0)
            return v
    
    
    s = Solution()
    tree1 = TreeNode(1)
    t1 = TreeNode(6)
    t2 = TreeNode(8)
    t3 = TreeNode(4)
    t4 = TreeNode(5)
    tree1.left = t1
    tree1.right = t2
    t1.left = t3
    t3.right = t4
    
    t5 = TreeNode(14)
    t6 = TreeNode(12)
    t7 = TreeNode(16)
    t2.right = t5
    t5.left = t6
    t5.right = t7
    
    print(s.PrintFromTopToBottom(tree1))

    23、二叉搜索树的后序遍历序列

    后序遍历 的序列中,最后一个数字是树的根节点 ,数组中前面的数字可以分为两部分:第一部分是左子树节点 的值,都比根节点的值小;第二部分 是右子树 节点的值,都比 根 节点 的值大,后面用递归分别判断前后两部分 是否 符合以上原则

    # -*- coding:utf-8 -*-
    class Solution:
        def VerifySquenceOfBST(self, sequence):
            # write code here
            if len(sequence) == 0:
                return False
            l = len(sequence)
            root = sequence[l - 1]
            for i in range(l):
                if sequence[i] > root:
                    break
            for j in range(i, l):
                if sequence[j] < root:
                    return False
            left = True
            right = True
            if i > 0:
                left = self.VerifySquenceOfBST(sequence[0:i])
            if i < l - 1:
                right = self.VerifySquenceOfBST(sequence[i:l - 1])
            return left and right
    
    
    s = Solution()
    sp = [5, 4, 6, 12, 16, 14, 8, 7]
    sp1 = [7, 6, 8, 4, 14, 5, 12, 16]
    print(s.VerifySquenceOfBST(sp))
    print(s.VerifySquenceOfBST(sp1))
  • 相关阅读:
    [转]pycharm的一些快捷键
    Python学习笔记(三十五)—内置模块(4)struct
    Python学习笔记(三十四)—内置模块(3)base64
    Python学习笔记(三十三)常用内置模块(2)collections_namedtuple_deque_defaultdict_OrderedDict_Counter
    Python学习笔记(三十二)常用内建模块(1)— datetime
    Python学习笔记(二十九)ThreadLocal
    使用Java代码发送SMTP邮件
    Python学习笔记(二十五)操作文件和目录
    Python学习笔记(二十)调试
    Python学习笔记(十八)@property
  • 原文地址:https://www.cnblogs.com/dong973711/p/12022339.html
Copyright © 2011-2022 走看看