1. 程式人生 > >Binary Tree Traverasl with OO and Stack

Binary Tree Traverasl with OO and Stack

Binary Tree Traverasl with OO and Stack

1、一切都是物件,物件就是關係和操作;每個節點,都有兩種操作,print和visit。
2、放在stack裡面可以使操作,可以是函式,遞迴也是面向物件的體現;

Python程式碼實現如下:

class guide(object):
    def __init__(self, opt,node):
        self.opt = opt
        self.node = node
         
class Solution2(object):
 
    def preorderTraversal
(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] ans = [] path = [guide(0,root),] while path: current = path.pop() if not current.node: continue
if current.opt == 1: ans += [current.node.item] else: path += [guide(0,current.node.right)] path += [guide(0,current.node.left)] path += [guide(1,current.node)] return ans def
inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] ans = [] path = [guide(0,root),] while path: current = path.pop() if not current.node: continue if current.opt == 1: ans += [current.node.item] else: path += [guide(0,current.node.right)] path += [guide(1,current.node)] path += [guide(0,current.node.left)] return ans def postorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ if root is None: return [] ans = [] path = [guide(0,root),] while path: current = path.pop() if not current.node: continue if current.opt == 1: ans += [current.node.item] else: path += [guide(1,current.node)] path += [guide(0,current.node.right)] path += [guide(0,current.node.left)] return ans

Test case:

if __name__ =="__main__":
    tree =tree.Node()
    tree._add(0)
    tree._add(1)
    tree._add(2)
    tree._add(3)
    tree._add(4)
    tree._add(5)
    tree._add(6)
    tree._add(7)
    tree._add(8)
    tree._add(9)
    tree._add(10)

    ans = Solution3().preorderTraversal(tree)
    print ans

    ans = Solution3().inorderTraversal(tree)
    print ans

    ans = Solution3().postorderTraversal(tree)
    print ans 

Output:

[0, 1, 3, 5, 7, 9, 10, 8, 6, 4, 2]
[9, 7, 10, 5, 8, 3, 6, 1, 4, 0, 2]
[9, 10, 7, 8, 5, 6, 3, 4, 1, 2, 0]