Nth node in inorder traversal

Problem Here we have to return pointer to nth node in the inorder traversal Solution // Get the pointer to the nth inorder node in "nthnode" void nthinorder(node \*root, int n, mynode \*\*nthnode) { static whichnode; static found; if(!found) { if(root) { nthinorder(root->left, n , nthnode); if(++whichnode == n) { printf("\\nFound %dth node\\n", n); found = 1; \*nthnode = root; // Store the pointer to the nth node. } nthinorder(root->right, n , nthnode); } } } 17\. [Read More]

IsBST : Check whether the tree provided is BST or not

Problem This background is used by the next two problems: Given a plain binary tree, examine the tree to determine if it meets the requirement to be a binary search tree. To be a binary search tree, for every node, all of the nodes in its left tree must be <= the node, and all of the nodes in its right subtree must be > the node. Consider the following four examples… [Read More]

Count binary search trees–Given N nodes, how many structurally BST are possible?

Problem: This is not a binary tree programming problem in the ordinary sense – it’s more of a math/combinatorics recursion problem that happens to use binary trees. Suppose you are building an N node binary search tree with the values 1..N. How many structurally different binary search trees are there that store those values? Solution Total number of possible Binary Search Trees with n different keys = Catalan number Cn = (2n)! [Read More]

Check whether binary tree are same or not?

Problem Given two binary trees, return true if they are structurally identical – they are made of nodes with the same values arranged in the same way. Solution 11\. sameTree() Solution (C/C++) /\* Given two trees, return true if they are structurally identical. \*/ int isIdentical(struct node\* a, struct node\* b) { // 1. both empty -> true if (a==NULL && b==NULL) return(true); // 2. both non-empty -> compare them else if (a! [Read More]

Double the tree such that insert new duplicate node for each node using cpp

Problem For each node in a binary search tree, create a new duplicate node, and insert the duplicate as the left child of the original node. The resulting tree should still be a binary search tree. So the tree… 2 / \ 1 3 is changed to… 2 / \ 2 3 / / 1 3 / 1 As with the previous problem, this can be accomplished without changing the root node pointer. [Read More]

Given a BST, create a mirror of it.

Problem Change a tree so that the roles of the left and right pointers are swapped at every node. Example So the tree… 4 / \ 2 5 / \ 1 3 is changed to… 4 / \ 5 2 / \ 3 1 The solution is short, but very recursive. As it happens, this can be accomplished without changing the root node pointer, so the return-the-new-root construct is not necessary. [Read More]

Given Binary Tree and sum, give root to leaf path such that all nodes add to that sum

We’ll define a “root-to-leaf path” to be a sequence of nodes in a tree starting with the root node and proceeding downward to a leaf (a node with no children). We’ll say that an empty tree contains no root-to-leaf paths. So for example, the following tree has exactly four root-to-leaf paths: 5 / \\ 4 8 / / \\ 11 13 4 / \\ \\ 7 2 1 ```Root-to-leaf paths: path 1: 5 4 11 7 path 2: 5 4 11 2 path 3: 5 8 13 path 4: 5 8 4 1 For this problem, we will be concerned with the sum of the values of such a path -- for example, the sum of the values on the 5-4-11-7 path is 5 + 4 + 11 + 7 = 27. [Read More]

Print binary search tree in increasing order

Given a binary search tree (aka an “ordered binary tree”), iterate over the nodes to print them out in increasing order. So the tree… 4 / \ 2 5 / \ 1 3 Produces the output “1 2 3 4 5”. This is known as an “inorder” traversal of the tree. Hint: For each node, the strategy is: recur left, print the node data, recur right. Here is code in c/cpp: [Read More]

Find the minimum data value find in Binary Search tree (using cpp)

Given a non-empty binary search tree (an ordered binary tree), return the minimum data value found in that tree. Note that it is not necessary to search the entire tree. A maxValue() function is structurally very similar to this function. This can be solved with recursion or with a simple while loop. int minValue(struct node* node) { /\* Given a non-empty binary search tree, return the minimum data value found in that tree. [Read More]