昨天学了二叉树的递归之后,递归进步很多了,差一点就写出来,继续加油。
46.二叉树展开为链表
递归法:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def flatten(self, root):
"""
:type root: Optional[TreeNode]
:rtype: None Do not return anything, modify root in-place instead.
"""
def unflodnode(p):
if p is None:
return None
myleft = unflodnode(p.left)
myright = unflodnode(p.right)
p.left = None
p.right = myleft
#这里cur=p而不是myleft 否则会有空指针报错
cur = p
while cur.right is not None:
cur = cur.right
cur.right = myright
return p
unflodnode(root)
迭代法:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def flatten(self, root):
"""
:type root: Optional[TreeNode]
:rtype: None Do not return anything, modify root in-place instead.
"""
#需要锻炼使用辅助空间思考以及解题的能力
#记录下前序遍历过程中的节点进入list,遍历完后,根据list的两个节点(一个不够,连接不起来),就可以实现对链表结构的改变
mylist = []
def dfs(root):
if root is None:
return
mylist.append(root)
dfs(root.left)
dfs(root.right)
dfs(root)
for i in range(len(mylist)-1):
prev = mylist[i]
cur = mylist[i+1]
prev.left = None
prev.right = cur
回宿舍后多做了一道题:
459.重复的子字符串
class Solution(object):
def repeatedSubstringPattern(self, s):
"""
:type s: str
:rtype: bool
"""
#两层循环,外层是遍历第一个字符到第i个字符组成的子串,i<= len(s)/2
#内层循环:反复拼接子串自身(应该说 拼接的是外层子串) 直至长度与S相等 而后比较
if len(s)==1:
return False
for i in range(len(s)//2):
subStr = s[:i+1]
cur =subStr
while cur != s and len(cur) <= len(s):
cur += subStr
if cur == s:
return True
return False

6662

被折叠的 条评论
为什么被折叠?



