Nix
Nix

Reputation: 143

How to create a Binary Tree in Python?

# Binary tree node
class node:
     
    def __init__(self, data):
        self.left=None
        self.right=None
        self.data=data
  
# Function to create a new
# Binary node
def newNode(data):
    return node(data)

def t():
    root=newNode("A")
    root.left = newNode("B")
    root.right = newNode("C")
    root.left.left = newNode("D")
    root.left.right = newNode("G")
    root.right.right = newNode("E")
    root.right.right.left = newNode("F")
    

print(t)

Hi, I have tried to create a Binary Tree above but I did not managed to print out the binary tree when I print "t". Instead of a Binary Tree, it shows me this: enter image description here

Upvotes: 0

Views: 2102

Answers (3)

Nix
Nix

Reputation: 143

# Binary tree node
class node:
     
    def __init__(self, data):
        self.left=None
        self.right=None
        self.data=data
  
# Function to create a new
# Binary node
def newNode(data):
    return node(data)

def tree():
    root=newNode("A")
    root.left = newNode("B")
    root.right = newNode("C")
    root.left.left = newNode("D")
    root.left.right = newNode("G")
    root.right.right = newNode("E")
    root.right.right.left = newNode("F")
    return root

t = tree()

print(t.left.data)
print(t.right.data)
print(t.root)

How do I access the root of the tree from here?

I have tried printing t.root but it seemed to have an error :(

Upvotes: 0

Aziz Sonawalla
Aziz Sonawalla

Reputation: 2502

So two things:

When you do print(t) instead of print(t()), there's a difference. print(t) prints the function object itself, whereas print(t()) prints the result returned by the function.

However, even if you do the latter, you'll print None because t() doesn't return anything. You'll need to return root from t() and also you'll have to write a special function that iterates through the tree to print each node's value (if that's what you want)

Here's an example:

# Binary tree node
class node:
     
    def __init__(self, data):
        self.left=None
        self.right=None
        self.data=data
  
# Function to create a new
# Binary node
def newNode(data):
    return node(data)

def t():
    root=newNode("A")
    root.left = newNode("B")
    root.right = newNode("C")
    root.left.left = newNode("D")
    root.left.right = newNode("G")
    root.right.right = newNode("E")
    root.right.right.left = newNode("F")
    return root
    

def treeToString(root, level=0):
  ret = "\t"*level+repr(root.data)+"\n"
  if root.left != None:
      ret += treeToString(root.left, level+1)
  if root.right != None:
      ret += treeToString(root.right, level+1)
  return ret

print(treeToString(t()))


# if you want to assign the tree to an object then do this:

tree = t()
print(tree.left.data)
print(tree.right.data)

Upvotes: 2

mujjiga
mujjiga

Reputation: 16856

Function t just creates a binary tree. If you want to print a tree you need to traverse it and print it. Depending on the way you want to print a tree, there are different traversal techniques, the popular of which are Inorder, Preorder and Postorder. Check this wiki link for tree traversal methods.

Your code has to be extended to do the required tree traversal. Sample is below:

# Binary tree node
class node:
     
    def __init__(self, data):
        self.left=None
        self.right=None
        self.data=data
  
# Function to create a new
# Binary node
def newNode(data):
    return node(data)

def t():
    root=newNode("A")
    root.left = newNode("B")
    root.right = newNode("C")
    root.left.left = newNode("D")
    root.left.right = newNode("G")
    root.right.right = newNode("E")
    root.right.right.left = newNode("F")
    return root


def in_order(root):
    if root:
        in_order(root.left)
        print (root.data)
        in_order(root.right) 

def pre_order(root):
    if root:
        print (root.data)
        pre_order(root.left)
        pre_order(root.right)
        
def post_order(root):
    if root:        
        post_order(root.left)
        post_order(root.right)
        print (root.data)
        
root = t()


print ("In Order")
in_order(root)
print ("Pre Order")
pre_order(root)
print ("Post Order")
post_order(root)

Output:

In Order
D
B
G
A
C
F
E
Pre Order
A
B
D
G
C
E
F
Post Order
D
G
B
F
E
C
A

Upvotes: 3

Related Questions