二叉樹的遍歷遞迴和非遞迴 python版本
前序遍歷非遞迴
def preorder(self, root):
if root == none:
return
stack =
node = root
while node or stack:
while node:
# 從根節點開始,一直找它的左子樹
print(node.val)
node = node.left
# while結束表示當前節點node為空,即前乙個節點沒有左子樹了
node = stack.pop()
# 開始檢視它的右子樹
node = node.right
中序遍歷非遞迴
def inorder(self,root):
if root == none:
return
stack =
while node or stack:
while node:
# 從根節點開始,一直找到左子樹
node = node.left
# while結束表示當前節點node為空,即前乙個節點沒有左子樹了
node = stack.pop()
print(node.val)
node = node.right
後序遍歷非遞迴
def postorder(self,root):
if root == none:
return
stack1 =
stack2 =
node = root
while stack1:
# 這個while迴圈使用者找到後續遍歷的逆序,存在stack2中
node = stack1.pop()
if node.left:
if node.right:
while stack2:
print(stack2.pop().val)
public class solution
print sorted(d.items(),key=lambda x:x[1],reverse=false)
#快速排序
def partition(v,left,right):
key=v[left]
low=left
high=right
while low=key):
high -=1
v[low]=v[high]
while (low操作1:m=s ;s=s+s
操作2:s=s+m
初始化:s="a";m=s
給定乙個字串長度n最少需要幾次操作才能獲得最後的結果
測試用例:n=4 返回2
number = int(raw_input("enter a number: "))
def test(number):
r =
while number != 1:
for i in range(1, number + 1):
if (number % i) == 0 and i != 1:
number = number / i
if number == 1:
# print " %d" %i
else:
# print " %d*" %i,
break
count = 0
count1 = 0
count2 = 0
for i in r:
if i == 2:
count += 1
elif i == 3:
count1 += 2
else:
count2 += (i-1)
return (count+count1+count2)
test(number)
思路:將兩個字串a,b轉換成列表,以第二個字串b的長度作為滑動視窗的長度進行滑動,將結果以字典形式存起來,key值是a列表下標,value值就是滑動視窗在a列表上獲得的長度為len(b_list)子列表.
#kmp字串匹配。給你兩個字串,尋找其中乙個字串是否包含另乙個字串,如果包含,返回包含的起始位置
def ngrams(input,n):
output = {}
for i in range(len(input)-n+1):
output.setdefault(i,input[i:i+n])#
return output
def find(a,b):
a_list=list(a)
b_list=list(b)
n=len(b_list)
a_dict=ngrams(a_list,n)
for k,v in a_dict.items():
if v==b_list:
return k
else:
continue
return -1
a=raw_input("a:")
b=raw_input("b:")
k=find(a,b)
print k
樹的路徑
# definition for a binary tree node.
class treenode(object):
def __init__(self, x):
self.val = x
self.left = none
self.right = none
class solution(object):
def binarytreepaths(self, root):
""":type root: treenode
:rtype: list[str]
"""paths=
if not root:return paths
leftpaths,rightpaths=,
leftpaths=self.binarytreepaths(root.left)
rightpaths=self.binarytreepaths(root.right)
for path in leftpaths:
print path
a=str(root.val)+"->"+str(path)
for path in rightpaths:
a = str(root.val) + "->" + str(path)
if(len(paths)==0):
return paths
翻轉鍊錶
# -*- coding:utf-8 -*-
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class solution:
# 返回listnode
def reverselist(self, phead):
# write code here
if not phead or not phead.next:
return phead
head=phead
pre=none
while head:
next=head.next
head.next=pre
pre=head
head=next
return pre
#遞迴版本字串反轉
def func(s):
if len(s) <1:
return s
return func(s[1:])+s[0]
#非遞迴
str[::-1]
iOS面試常見題
1.耶穌有13個門徒,其中有乙個就是出賣耶穌的叛徒,請用排除法找出這位叛徒 13個人圍坐一圈,從第乙個人開始迴圈報數,數到三排除,最後剩下的人就是叛徒 int people 13 int count 0 用來記錄報數 int number 13 記錄活著的人數 int i 0 記錄第幾個人正在報數 ...
Python爬蟲工程師面試常見題
一.專案問題 一般面試官的第乙個問題八成都是問一下以前做過的專案,所以最好準備兩個自己最近寫的有些技術 含量的專案,當然一定要自己親手寫過的,在別的地方看的原始碼,就算看的再清楚,總歸沒有自己敲的 了解的多。以下是抽出的幾點 1.你寫爬蟲的時候都遇到過什麼反爬蟲措施,你是怎麼解決的 2.用的什麼框架...
JS面試常見演算法題
學習資料結構與演算法對於工程師去理解和分析問題都是有幫助的。如果將來當我們面對較為複雜的問題,這些基礎知識的積累可以幫助我們更好的優化解決思路。下面羅列在前端面試中經常撞見的幾個問題吧。1.統計乙個字串出現最多的字母和出現的次數 第一種方法 var str abcdeddd var n for va...