作业帮笔试7.31

1.非递归中序遍历

用栈的方式完成,由于后进先出的特性,不断压入根节点的所有左节点直到当前节点为空,然后弹出节点,并且遍历节点的右节点。如果有节点有左子树,则继续压入。。

class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        # cur当做指针
        cur = root
        res = []
        stack = []
        while cur or stack:
            # 把左子树压入栈中
            while cur:
                stack.append(cur)
                cur = cur.left
            # 输出栈顶元素
            cur = stack.pop()
            res.append(cur.val)
            # 检查右子树
            cur = cur.right
        return res

2. 重建二叉树

根据前序和中序遍历,返回后序遍历

class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        if len(pre) == 0:
            return None
        if len(pre) == 1:
            # 按照树节点的结构定义!!!
            return TreeNode(pre[0])
        # 找到根节点,按照树节点的结构定义!!!
        root = TreeNode(pre[0])
        # 在中序遍历中找到根节点,并且划分左\右子树
        root_p = tin.index(root.val)
        root.left = self.reConstructBinaryTree(pre[1:root_p+1], tin[:root_p])
        # 注意下标:tin[root_p+1:]
        root.right = self.reConstructBinaryTree(pre[root_p+1:], tin[root_p+1:])
        return root

3. 用两个队列实现一个栈

解法:一个队列放入,一个队列输出。因为栈是后入先出,所以把q1的元素依次删除并插入q2,再删除最后一个元素。然后q1赋值为q2,q2初始化为空,这样才能不断删除。

 # 用两个队列实现一个栈
    class Stack:
        def __init__(self):
            self.q1 = []
            self.q2 = []

        def append(self, nums):
            self.q1.append(nums)
            return self.q1

        def pop(self):
            while len(self.q1) != 1:
                self.q2.append(self.q1.pop(0))
            stack_top = self.q1.pop(0)
            self.q1 = self.q2
            self.q2 = []
            return stack_top


    a = Stack()
    a.append(1)
    a.append(2)
    a.append(3)
    a.append(4)
    print(a.append(5))
    print(a.pop())
    print(a.pop())
    print(a.append(7))

4. 定义类的规范!

注意格式:面试时,class 之后加上名称,不带括号;初始化定义写法为def。self代表类的实例。

class Person:
    def __init__(self, name = 'Charlie', age=8):
        self.name = name
        self.age = age
    def say(self, content):
        print(content)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章