Skip to main content

Detect leaf nodes of threaded BST in golang

Print leaf node in Threaded BST

Go program for Detect leaf nodes in threaded BST. Here mentioned other language solution.

package main
import "fmt"
// Go program for
// Print leaf node in Threaded BST
type TreeNode struct {
    data int
    left * TreeNode
    right * TreeNode
}
func getTreeNode(data int, 
                 left * TreeNode, 
                 right * TreeNode) * TreeNode {
    // return new TreeNode
    return &TreeNode {
        data,
        left,
        right,
    }
}
type BinarySearchTree struct {
    root * TreeNode
}
func getBinarySearchTree() * BinarySearchTree {
    // return new BinarySearchTree
    return &BinarySearchTree {
        nil,
    }
}
// Added node in Threaded BST
func(this BinarySearchTree) addNode(node * TreeNode, 
                                    x * TreeNode, 
                                    y * TreeNode, 
                                    data int) * TreeNode {
    if node != nil {
        if node.data >= data {
            if node.left == x {
                node.left = getTreeNode(data, x, node)
            } else {
                node.left = this.addNode(node.left, x, node, data)
            }
        } else if node.data < data {
            if node.right == y {
                node.right = getTreeNode(data, node, y)
            } else {
                node.right = this.addNode(node.right, node, y, data)
            }
        }
        return node
    } else {
        return getTreeNode(data, x, y)
    }
}
// Adding a new node in binary search tree
func(this *BinarySearchTree) add(data int) {
    this.root = this.addNode(this.root, nil, nil, data)
}
// Print all leaf node in Threaded BST
func(this BinarySearchTree) leafNode(node, x, y *TreeNode) {
    if node != nil {
        if node.left == x && node.right == y {
            // This is a leaf node Then print
            fmt.Print("  ", node.data)
            return
        }
        if node.left != x {
            // Visit left child
            this.leafNode(node.left, x, node)
        }
        if node.right != y {
            // Visit right child
            this.leafNode(node.right, node, y)
        }
    }
}
func main() {
    var tree * BinarySearchTree = getBinarySearchTree()
    // Add nodes in binary search tree
    /*
                5
               / \
              /   \
             /     \
            3       9
           / \     / \
          1   4   8   11
         / \     /      \
       -3   2   7        12
            
    */
    tree.add(5)
    tree.add(3)
    tree.add(9)
    tree.add(1)
    tree.add(4)
    tree.add(8)
    tree.add(11)
    tree.add(-3)
    tree.add(2)
    tree.add(7)
    tree.add(12)
    // Test
    tree.leafNode(tree.root, nil, nil)
}

Output

  -3  2  4  7  12




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment