table of Contents
- Delete duplicate node in the list
- K-node binary search tree
- Rotate Left bit string k
- The number of integer in the range of 1 appears
- For a binary tree and path value
- Frog jump step (Fibonacci)
- Drawing with leafy trees by recursive method
- Draw Sierpinski triangle
0.1 Delete duplicate node list
class LinkedNode:
def __init__(self, x):
self.val = x
self.next = None
def delete(pHead):
nodeValue = {}
newHead = LinkedNode(pHead.val)
nodeValue[pHead.val] = pHead.val
curNode = newHead
while pHead.next:
pHead = pHead.next
if nodeValue.get(pHead.val) == None:
curNode.next = LinkedNode(pHead.val)
curNode = curNode.next
nodeValue[pHead.val] = pHead.val
return newHead
header = LinkedNode(5)
node1 = LinkedNode(5)
header.next = node1
node2 = LinkedNode(10)
node1.next = node2
node3 = LinkedNode(3)
node2.next = node3
def printLinked(header):
p = header
while p:
print(p.val, end=' ')
p = p.next
header1 = delete(header)
printLinked(header1)
0.2 two k-th node of the binary search tree
中序遍历
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class KNode:
def KthNode(self, pRoot, k):
global result
result = []
middle = self.midorder(pRoot)
if k <= 0 or len(middle) < k:
return None
else:
return middle[k - 1]
def midorder(self, pRoot):
if not pRoot:
return []
self.midorder(pRoot.left)
result.append(pRoot)
self.midorder(pRoot.right)
return result
root = TreeNode(10)
left = TreeNode(6)
right = TreeNode(15)
root.left = left
root.right = right
left1 = TreeNode(11)
right1 = TreeNode(20)
right.left = left1
right.right = right1
print(KNode().KthNode(root, 4).val)
15
0.3 Rotate Left string of k bits
def leftmove(s, k):
return s[k:] + s[:k]
def rightmove(s, k):
return s[len(s) - k:] + s[:len(s) - k]
print(leftmove('abcXYZopq', 3))
print(rightmove('abcXYZopq', 3))
An integer in the range 0.4 times appearing
def findone(n):
count = 0
for i in range(1, n+1):
for i in str(i):
if i == '1':
count +=1
return count
print(findone(200))
140
And a path for a binary value of 0.5
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def findpath(root, n):
if not root:
return []
result = []
def findpath2(root, path, curNum):
curNum += root.val
path.append(root)
flag = root.left == None and root.right == None
if curNum == n and flag:
onepath = []
for node in path:
onepath.append(node.val)
result.append(onepath)
if curNum < n:
if root.left:
findpath2(root.left, path, curNum)
if root.right:
findpath2(root.right, path, curNum)
path.pop()
findpath2(root, [], 0)
return result
root = TreeNode(10)
left = TreeNode(6)
right = TreeNode(15)
root.left = left
root.right = right
left1 = TreeNode(11)
right1 = TreeNode(20)
right.left = left1
right.right = right1
print(findpath(root, 16))
[[10, 6]]
0.6 frog jump step (Fibonacci number)
'''
总共 n 级台阶,剩下 f(n) 级
1.第一次跳 1 级,剩下 f(n-1) 级
2.第一次跳 2 级,剩下 f(n-2) 级
第一次跳就这两个方法,总共 f(n-1) + f(n-2) 种方法
f(1) = 1
f(2) = 2
斐波那契数列
'''
def jumpfloor(n):
res = [1, 2]
while len(res) <= n:
res.append(res[-1] + res[-2])
if n == 1:
return 1
else:
return res[n - 1]
print(jumpfloor(20))
10946
Drawing 0.7 with leafy trees by recursive method
import turtle
def tree(branch_len, t):
if branch_len > 5:
t.forward(branch_len)
if (branch_len - 15) <= 5:
t.pencolor('green')
else:
t.pencolor('black')
new_width = branch_len // 5
if new_width > 0:
t.pensize(new_width)
t.right(20)
tree(branch_len - 15, t)
if new_width > 0:
t.pensize(new_width)
t.left(40)
tree(branch_len - 15, t)
t.right(20)
t.backward(branch_len)
t = turtle.Turtle()
win = turtle.Screen()
t.left(90)
t.pencolor('black')
t.pensize(15)
tree(70, t)
win.exitonclick()
Sierpinski triangle drawn 0.8
import turtle
def draw_triangle(points, color, t):
t.fillcolor(color)
t.up()
t.goto(points[0][0], points[0][1])
t.down()
t.begin_fill()
t.goto(points[1][0], points[1][1])
t.goto(points[2][0], points[2][1])
t.goto(points[0][0], points[0][1])
t.end_fill()
def mid_point(p1, p2):
return ((p1[0] + p2[0])/2, (p1[1] + p2[1])/2)
def sterpin(points, degree, t):
color = ['blue', 'green', 'red', 'yellow', 'orange', 'violet']
draw_triangle(points, color[degree], t)
if degree >= 0:
sterpin([points[0], mid_point(points[0], points[1]), mid_point(points[0], points[2])], degree - 1, t)
sterpin([points[1], mid_point(points[0], points[1]), mid_point(points[1], points[2])], degree - 1, t)
sterpin([points[2], mid_point(points[2], points[1]), mid_point(points[0], points[2])], degree - 1, t)
t = turtle.Turtle()
win = turtle.Screen()
points = [[-200, -100], [0, 200], [200, -100]]
sterpin(points, 4, t)
win.exitonclick()