Root Path as DLL
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class BTree:
def __init__(self):
self.root = None
def getRoot(self):
return self.root
def add(self, val):
if(self.root == None):
self.root = TreeNode(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if(val < node.val):
if(node.left != None):
self._add(val, node.left)
else:
node.left = TreeNode(val)
else:
if(node.right != None):
self._add(val, node.right)
else:
node.right = TreeNode(val)
def find(self, val):
if(self.root != None):
return self._find(val, self.root)
else:
return None
def _find(self, val, node):
if(val == node.val):
return node
elif(val < node.val and node.left != None):
self._find(val, node.l)
elif(val > node.val and node.right != None):
self._find(val, node.right)
def deleteTree(self):
# garbage collector will do this for us.
self.root = None
def printTree(self):
if(self.root != None):
self._printTree(self.root)
def _printTree(self, node):
if(node != None):
self._printTree(node.left)
print(str(node.val) + ' ')
self._printTree(node.right)
# 3
# 0 4
# 2 8
tree = BTree()
tree.add(3)
tree.add(4)
tree.add(0)
tree.add(8)
tree.add(2)
tree.printTree()
print((tree.find(3)).val)
print(tree.find(10))
def treeNodePathtoDLL(root, tree_node_val):
path = []
finish = [False]
def dfs(root):
if root and not finish[0]:
path.append(root.val)
if root.val == tree_node_val:
finish[0] = True
return
else:
dfs(root.left)
dfs(root.right)
if not finish[0]:
path.pop()
dfs(root)
return DLL(path) if path else None
def printDLL(dll_node, is_front):
iter = dll_node
if is_front:
while iter:
print('%i -> ' % iter.val, end='')
iter = iter.next
print()
else:
while iter:
print('%i <- ' % iter.val, end='')
iter = iter.prev
print()
class DLL_node:
def __init__(self, val):
self.prev, self.next = None, None
self.val = val
class DLL:
def __init__(self, list):
"""
:param list: construct DLL via list
"""
self.front = None
self.tail = None
for elm in list:
self.addNode(elm)
def addNode(self, elm):
if not self.front:
self.tail = self.front = DLL_node(elm)
else:
tmp = self.tail
self.tail.next = DLL_node(elm)
self.tail = self.tail.next
self.tail.prev = tmp
DLL_t1 = treeNodePathtoDLL(tree.root, 3)
printDLL(DLL_t1.front, True)
printDLL(DLL_t1.tail, False)
DLL_t2 = treeNodePathtoDLL(tree.root, 8)
printDLL(DLL_t2.front, True)
printDLL(DLL_t2.tail, False)
DLL_t3 = treeNodePathtoDLL(tree.root, 2)
printDLL(DLL_t3.front, True)
printDLL(DLL_t3.tail, False)
DLL_t4 = treeNodePathtoDLL(tree.root, 4)
printDLL(DLL_t4.front, True)
printDLL(DLL_t4.tail, False)
DLL_t5 = treeNodePathtoDLL(tree.root, 100)
printDLL(DLL_t5.front, True)
printDLL(DLL_t5.tail, False)Last updated