2015-03-30 77 views
2

我有一个简单的Tree数据结构,但是,我想实现两个方法,名为isLeftChildisRightChild如何确定一个二叉树节点是左边还是右边的孩子?

问题是我很难理解树木。概念和一般过程尚未完全掌握。

这里是我的简单的树至今:

class Node(object): 
    ''' A tree node. ''' 
    def __init__(self, data): 
     self.left = None 
     self.right = None 
     self.data = data 

    def isLeftChild(self): 
     ''' Returns True if the node is a left child, else False. ''' 
     pass 

    def isRightChild(self): 
     ''' Returns True if the node is a right child, else False. ''' 
     pass 

    def insert(self, data): 
     ''' Populate the tree. ''' 
     if self.data: 
      if data < self.data: 
       if self.left is None: 
        self.left = Node(data) 
       else: 
        self.left.insert(data) 
      elif data > self.data: 
       if self.right is None: 
        self.right = Node(data) 
       else: 
        self.right.insert(data) 
     else: 
      self.data = data 

    def printTree(self): 
     ''' Display the tree. ''' 
     if self.left: 
      self.left.printTree() 
     print self.data 
     if self.right: 
      self.right.printTree() 

def main(): 
    root = Node(8) 
    root.insert(2) 
    root.printTree() 

main() 

怎样才可以有一个节点确定它是否是一个左子或右子(不参照其data

我不知道我需要添加到我的树,以确定这一点。

回答

3

使用父属性并测试内存引用,如果父母的右边或左边与内存中的子引用相同。无论如何,你将需要一个父属性来遍历树。

return self is self.parent.left # in the isLeftChild 
相关问题