Advertisement
joric

rebalance_tree.cpp

Mar 1st, 2017
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. // rebalance binary tree
  2.  
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. struct node {
  7.     node * left;
  8.     node * right;
  9.     int value;
  10.     node(int value=0) : value(value), left(0), right(0) {}
  11. };
  12.  
  13. void inorder(node * root, int *i, int * buf) {
  14.     if (!root) return;
  15.     inorder(root->left, i, buf);
  16.     buf[(*i)++] = root->value;
  17.     inorder(root->right, i, buf);
  18. }
  19.  
  20. node * make_bst(int * buf, int start, int end) {
  21.     if (start>end) return 0;
  22.     int mid = (start + end)/2;
  23.     node * root = new node(buf[mid]);
  24.     root->left = make_bst(buf, start, mid-1);
  25.     root->right = make_bst(buf, mid+1, end);
  26.     return root;
  27. }
  28.  
  29. void dump(node * root, int indent = 0) {
  30.     if (!root) return;
  31.     printf("%*s%d\n", indent, "", root->value);
  32.     dump(root->left, indent+1);
  33.     dump(root->right, indent+1);
  34. }
  35.  
  36. void main() {
  37.     int a[]={1,2,3,4,6,7,9};
  38.     const int n = 7;
  39.     node nodes[n];
  40.     for (int i=0; i<n; i++) { nodes[i].value=a[i]; nodes[i].right=i+1==n ? 0 : &nodes[i+1]; };
  41.     dump(&nodes[0]);
  42.  
  43.     int k = 0;
  44.     inorder(&nodes[0], &k, a);
  45.     sort(a, a+n);
  46.     node * root = make_bst(a, 0, n-1);
  47.     dump(root);
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement