Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ed1f769

Browse files
committed
Day5: Zig zag tree traversal python
1 parent a2444f2 commit ed1f769

File tree

2 files changed

+93
-4
lines changed

2 files changed

+93
-4
lines changed

‎README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
| Current Status| Stats |
88
| :------------: | :----------: |
99
| Total C++ Problems | 188 |
10-
| Total Python Problems | 9 |
11-
| Current Daily Streak| 4 |
10+
| Total Python Problems | 10 |
11+
| Current Daily Streak| 5 |
1212
| Last Streak | 06/20/2019 - 06/21/2019|
13-
| Current Streak | 06/23/2019 - 06/26/2019|
13+
| Current Streak | 06/23/2019 - 06/27/2019|
1414

1515
</center>
1616

@@ -117,7 +117,7 @@ Include contains single header implementation of data structures and some algori
117117
| :------------ | :----------: |
118118
|Iterative Level order traversal of Tree using queue |[levelOrderTraversalIterative.cpp](tree_problems/levelOrderTraversalIterative.cpp), [level_order_tree_traversal_iterative.py](tree_problems/level_order_tree_traversal_iterative.py)|
119119
|Recursive Level order traveral of Tree | [levelOrderTraversalRecursive.cpp](tree_problems/levelOrderTraversalRecursive.cpp), [level_order_tree_traversal_recursive.py](tree_problems/level_order_tree_traversal_recursive.py)|
120-
|ZigZag Traversal of Tree | [zigZagTraversal.cpp](tree_problems/zigZagTraversal.cpp)|
120+
|ZigZag Traversal of Tree | [zigZagTraversal.cpp](tree_problems/zigZagTraversal.cpp), [zig_zag_traversal.py](tree_problems/zig_zag_traversal.py)|
121121
|Predecessor and Successor of a given node in Binary Search Tree | [predecessorSuccessor.cpp](tree_problems/predecessorSuccessor.cpp)|
122122
|Given values of two nodes in a Binary Search Tree, find the Lowest Common Ancestor (LCA). Assume that both the values exist in the tree.| [lowest-common-ancestor.cpp](tree_problems/lowest-common-ancestor.cpp)|
123123
|Given a binary tree (unlike binary search tree), find the Lowest Common Ancestor (LCA).|[lowest-common-ancestor-binary-tree.cpp](tree_problems/lowest-common-ancestor-binary-tree.cpp)|

‎tree_problems/zig_zag_traversal.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
2+
# Given a binary Tree
3+
# 1
4+
# / \
5+
# 2 3
6+
# / \ / \
7+
# 4 5 6 7
8+
# Print zig-zag level order traversal
9+
# 1 3 2 4 5 6 7
10+
#
11+
12+
class TreeNode:
13+
def __init__(self, data):
14+
"""Representation of a binary tree node"""
15+
self.data = data
16+
self.left = None
17+
self.right = None
18+
19+
20+
class Tree:
21+
def __init__(self):
22+
"""Reprentation of a binary tree"""
23+
self.root = None
24+
25+
def _print_level(self, node, level, zig):
26+
"""Utility function to print the level, level starts with 1"""
27+
if node is None:
28+
return
29+
if level == 1:
30+
print(node.data, end=' ')
31+
return
32+
else:
33+
if zig:
34+
self._print_level(node.left, level-1, zig)
35+
self._print_level(node.right, level-1, zig)
36+
else:
37+
self._print_level(node.right, level-1, zig)
38+
self._print_level(node.left, level-1, zig)
39+
40+
def _height(self, node):
41+
"""Gets the height of the tree from node"""
42+
if node is None:
43+
return 0
44+
else:
45+
return max(self._height(node.left), self._height(node.right)) + 1
46+
47+
def print_zig_zag(self):
48+
"""Prints the zig zag level order"""
49+
if self.root is None:
50+
return
51+
h = self._height(self.root)
52+
zig = True
53+
for i in range(1, h+1):
54+
self._print_level(self.root, i, not zig)
55+
print()
56+
57+
def in_order(self):
58+
"""In order traversal of the tree"""
59+
current = self.root
60+
stack = []
61+
done = False
62+
while not done:
63+
if current is not None:
64+
stack.append(current)
65+
current = current.left
66+
67+
elif stack:
68+
current = stack.pop()
69+
print(current.data, end=' ')
70+
current = current.right
71+
else:
72+
done = True
73+
print()
74+
75+
if __name__ == "__main__":
76+
tree = Tree()
77+
tree.root = TreeNode(1)
78+
tree.root.left = TreeNode(2)
79+
tree.root.right = TreeNode(3)
80+
tree.root.left.left = TreeNode(4)
81+
tree.root.left.right = TreeNode(5)
82+
tree.root.right.left = TreeNode(6)
83+
tree.root.right.right = TreeNode(7)
84+
85+
print("In order:")
86+
tree.in_order()
87+
88+
print("Zig zag level order:")
89+
tree.print_zig_zag()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /