#include <iostream> #include <string.h> using namespace std; int max(int p, int q) { return ((p>q) ? p : q); } class node; class node { public: char c; node* l; node* r; }; void printinorder(node* root) { if(!root) { return; } printinorder(root->l); cout << root->c << " "; printinorder(root->r); } int depth(node* root) { if(!root) return 0; return 1 + max(depth(root->l), depth(root->r)); } void printbylevel(node* root, int depth, int level) { if(!root) return; if(depth == level) { cout << root->c; } else { printbylevel(root->l, depth, level+1); cout<<" "; printbylevel(root->r, depth, level+1); } } void printlevelorder(node *root) { int d = depth(root); for(int i=0; i<d; i++) { for(int j=0;j<d-i;j++) cout << " "; printbylevel(root, i, 0); cout << endl; } } node* createBalancedBST(char s[], int l, int r) { if(l==r) { node* t = new node(); t->c = s[l]; t->l = NULL; t->r = NULL; return t; } else if(l>r) return NULL; int median = (l+r)>>1; node* t = new node(); t->c = s[median]; t->l = createBalancedBST(s, l, median-1); t->r = createBalancedBST(s, median+1, r); return t; } int main() { // your code goes here char s[100]; cin >> s; node* root = createBalancedBST(s, 0, strlen(s)-1); cout << "tree input is:" << s << endl; cout << "inorder: "; printinorder(root); cout << "\ntree depth=" << depth(root) << endl; cout << "level order: \n"; printlevelorder(root); return 0; } tree input is:abcdefghijklmnopqrstuvwxyz inorder: a b c d e f g h i j k l m n o p q r s t u v w x y z tree depth=5 level order: m f t c i p w a d g k n r u y b e h j l o q s v x z
This blog site is dedicated for articles on problem solving using C, C++, data structures, algorithms. Besides this few technical articles are also presented.
Jun 26, 2017
create a balance BST from a sorted list
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment