Node* BinaryTree::FindCommonAncestorBSTbetter(Node* root, Node* node1, Node* node2) { int h1 = GetTreeHeight(node1); int h2 = GetTreeHeight(node2); int diffheight; if(h1 > h2) diffheight = h1 - h2; else { diffheight = h2 - h1; swap(node1, node2); } for(int i =0; i< dh; i++) node1 = node1->parent; while(node2) { if(node1->val == node2->val) return node1; node1 = node1->parent; node2 = node2->parent; } return NULL; }
int BinaryTree::GetTreeHeight(Node *CurrentNode) { if(CurrentNode == NULL) { return 0; } return 1 + max(GetTreeHeight(CurrentNode->left),GetTreeHeight(CurrentNode->right)); }
void BinaryTree::ReversePrinting() { int height = GetTreeHeight(root); for(int level = height; level > 0; level--) { levelPrint(root, level); cout << endl; } }
void BinaryTree::LevelPrinting() { int height = GetTreeHeight(root); for(int level = 1; level <= height; level++) { levelPrint(root, level); cout << endl; } }
int main() { #if 1 AddNode(&pRoot,4); AddNode(&pRoot,6); AddNode(&pRoot,2); AddNode(&pRoot,3); AddNode(&pRoot,5); AddNode(&pRoot,7); AddNode(&pRoot,1); //SubTree pRootSub = getbtNode(2); pRootSub->left = getbtNode(1); pRootSub->right = getbtNode(3);//true subtree case //pRootSub->right = getbtNode(4);//fasle subtree case #else//for Sum Tree pRoot = getbtNode(30); pRoot->left = getbtNode(10); pRoot->right = getbtNode(5); pRoot->left->left = getbtNode(6); pRoot->left->right = getbtNode(4); pRoot->right->right = getbtNode(3); pRoot->right->left = getbtNode(2); #endif cout<<endl<<"##########################################################################################################"<<endl; cout<<"Inorder Traversal ::"<<endl; Inorder(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Preorder Traversal ::"<<endl; Preorder(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Postorder Traversal ::"<<endl; Postorder(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Level Order Traversal ::"<<endl; LOrder(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Size of the Tree ::"<<endl; cout<<GetTreeSize(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Height of the Tree ::"<<endl; cout<<GetTreeHeight(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; #if 0 DeleteTree(&pRoot); AddNode(&pRoot,1); cout<<"Inorder Traversal after Deletion::"<<endl; Inorder(pRoot); cout<<endl; #endif MirrorTree(pRoot); cout<<"Inorder Traversal after MirrorTree operation::"<<endl; Inorder(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; MirrorTree(pRoot); cout<<"Inorder Traversal after MirrorTree operation for second time::"<<endl; Inorder(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Max Element of the Tree ::"<<endl; cout<<MaxTreeElement(pRoot); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; int path[7]; cout<<"Root To Leaf Paths ::"<<endl; RootToLeafPath(pRoot,path,0); cout<<endl<<"##########################################################################################################"<<endl; cout<<"Number of Leaf Nodes::"<<NumberOfLeafNodes(pRoot)<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"Ancestors of 7 are ::"<<endl; GetAncestors(pRoot,7); cout<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<"CheckSumTree ::"<<IsSumTree(pRoot)<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<endl<<"Lowest Common Ancestor of 1 and 3 ::"<<LCA(pRoot,1,3)->data<<endl; cout<<endl<<"Lowest Common Ancestor of 1 and 7 ::"<<LCA(pRoot,1,7)->data<<endl; cout<<endl<<"Lowest Common Ancestor of 4 and 6 ::"<<LCA(pRoot,4,6)->data<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<endl<<"Tree has Path Sum 9 ::"<<hasPathSum(pRoot,9)<<endl; cout<<endl<<"Tree has Path Sum 100 ::"<<hasPathSum(pRoot,100)<<endl; cout<<endl<<"Tree has Path Sum 15 ::"<<hasPathSum(pRoot,15)<<endl; cout<<endl<<"##########################################################################################################"<<endl; cout<<endl<<"Subtree ::"<<IsSubTree(pRoot,pRootSub)<<endl; cout<<endl<<"##########################################################################################################"<<endl; return 0; }