In a nutshell
Branch and bound solves the 0/1 knapsack — each item taken whole or not at all — by exploring a tree of include/exclude decisions, but it doesn't expand every branch. At each node it computes an upper bound: the most value that branch could possibly reach, estimated by optimistically filling the leftover capacity with fractions of the best remaining items. If that optimistic bound can't beat the best complete solution found so far, the whole branch is pruned unseen. The worst case is still exponential, but pruning skips huge parts of the tree in practice.