sundeepblue
3/27/2014 - 3:04 PM

Boundary Traversal of binary tree

Boundary Traversal of binary tree

void print_exterior_boundary(TreeNode *r) {
    if(!r) return;
    print_left_boundary_topdown(r);
    print_leaves(r);
    print_right_boundary_bottomup(r);
}

// print all leaves in left-right manner
void print_leaves(TreeNode *r) {
    if(!r) return;
    print_leaves(r->left);
    if(!r->left && !r->right) cout << r->val << " ";
    print_leaves(r->right);
}

// print all left boundry nodes, except a leaf node, in top-down manner
void print_left_boundary_topdown(TreeNode *r) {
    if(!r) return;
    if(r->left) {
        cout << r->val << " ";
        print_left_boundary_topdown(r->left);
    }
    else if(r->right) {                     // gist1
        cout << r->val << " ";
        print_left_boundary_topdown(r->right);
    }
    // do nothing if it is a leaf node, this way we avoid duplicates in output
}

void print_right_boundary_bottomup(TreeNode *r) {
    if(!r) return;
    if(r->right) {
        print_right_boundary_bottomup(r->right);
        cout << r->val << " ";
    }
    else if(r->left) {                      // gist2
        print_right_boundary_bottomup(r->left);
        cout << r->val << " ";
    }
    // do nothing if it is a leaf node, this way we avoid duplicates in output
}