ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021 fall cs61a dis08

2022-04-10 19:32:22  阅读:257  来源: 互联网

标签:return Tree rest cs61a dis08 Link 2021 lnk first


网址 https://inst.eecs.berkeley.edu/~cs61a/fa21/disc/disc08/
problem1:

problem2:

problem3:
递归

    def sum_nums(s):
        """
        >>> a = Link(1, Link(6, Link(7)))
        >>> sum_nums(a)
        14
        """
        "*** YOUR CODE HERE ***"
        if s is Link.empty:
            return 0
        return s.first + sum_nums(s.rest)

problem4:
这个也是用递归,因为不好判断哪一个链表最短,所以直接迭代比较麻烦

    def multiply_lnks(lst_of_lnks):
        """
        >>> a = Link(2, Link(3, Link(5)))
        >>> b = Link(6, Link(4, Link(2)))
        >>> c = Link(4, Link(1, Link(0, Link(2))))
        >>> p = multiply_lnks([a, b, c])
        >>> p.first
        48
        >>> p.rest.first
        12
        >>> p.rest.rest.rest is Link.empty
        True
        """
        # Implementation Note: you might not need all lines in this skeleton code
        product = 1
        for lnk in lst_of_lnks:
            if lnk is Link.empty:
                return Link.empty
            product *= lnk.first
    	lst_of_lnks_rset = [lnk.rest for lnk in lst_of_lnks]
        return Link(product, multiply_lnks(lst_of_lnks_rset))

problem5:
递归和迭代

    def flip_two(s):
        """
        >>> one_lnk = Link(1)
        >>> flip_two(one_lnk)
        >>> one_lnk
        Link(1)
        >>> lnk = Link(1, Link(2, Link(3, Link(4, Link(5)))))
        >>> flip_two(lnk)
        >>> lnk
        Link(2, Link(1, Link(4, Link(3, Link(5)))))
        """
        "*** YOUR CODE HERE ***"
        #if s is Link.empty or s.rest is Link.empty:
        #    return
        #tmp = s.rest.first
        #s.rest.first = s.first
        #s.first = tmp
        #flip_two(s.rest.rest)
        # For an extra challenge, try writing out an iterative approach as well below!
        "*** YOUR CODE HERE ***"
        while s is not Link.empty and s.rest is not Link.empty:
            tmp = s.rest.first
            s.rest.first = s.first
            s.first = tmp
            s = s.rest.rest

problem6:

    def make_even(t):
        """
        >>> t = Tree(1, [Tree(2, [Tree(3)]), Tree(4), Tree(5)])
        >>> make_even(t)
        >>> t.label
        2
        >>> t.branches[0].branches[0].label
        4
        """
        "*** YOUR CODE HERE ***"
        if t.label % 2 == 1:
            t.label += 1
        for i in t.branches:
            make_even(i)

problem7:

    def leaves(t):
        """Returns a list of all the labels of the leaf nodes of the Tree t.

        >>> leaves(Tree(1))
        [1]
        >>> leaves(Tree(1, [Tree(2, [Tree(3)]), Tree(4)]))
        [3, 4]
        """
        "*** YOUR CODE HERE ***"
        ans = []
        if t.is_leaf():
            return [t.label]
        for i in t.branches:
            ans += leaves(i)
        return ans

problem8:

    def find_paths(t, entry):
        """
        >>> tree_ex = Tree(2, [Tree(7, [Tree(3), Tree(6, [Tree(5), Tree(11)])]), Tree(1, [Tree(5)])])
        >>> find_paths(tree_ex, 5)
        [[2, 7, 6, 5], [2, 1, 5]]
        >>> find_paths(tree_ex, 12)
        []
        """

        paths = []
        if t.label == entry:
            [[t.label]]
        for i in t.branches:
            path = find_paths(i,entry)
            for j in path:
                j = [t.label] + j
                paths.append(j)
        return paths

标签:return,Tree,rest,cs61a,dis08,Link,2021,lnk,first
来源: https://www.cnblogs.com/echoT/p/16127141.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有