作业帮笔试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)

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值