二叉樹的大小是指樹中存在的節點的數量。例如,下面這棵二叉樹的大小是5。
我們定義 size(tree) 函數用來遞歸地計算二叉樹 tree 的大小,它的工作原理如下
二叉樹的大小 = 1 + 左子樹的大小 + 右子樹的大小
Algorithm:
size(tree) 1. 如果 tree 為空,則返回0 2. 否者 (a) 通過遞歸地調用 size(tree.left) 獲取左子樹的大小 (a) 通過遞歸地調用 size(tree.right) 獲取右子樹的大小 (c) 用如下公式求出二叉樹的大小: size(tree) = size(left) + size(right) + 1 (d) 返回 size(tree)
#include <stdio.h>
#include <stdlib.h>
/*
* 二叉樹節點包含數據域,指向左子樹的指針,指向右子樹的指針
*/
struct node { int data; struct node* left; struct node* right; };
/*
* 輔助函數
* 使用給定的數據生成二叉樹節點,節點的左子樹和右子樹均為空
*/
struct node* newNode(int data) { struct node* node = (struct node*) malloc(sizeof(struct node)); node->data = data; node->left = NULL; node->right = NULL; return(node); }
* 計算二叉樹中節點數
*/ int size(struct node* node) { if (node==NULL) return 0; else return(size(node->left) + 1 + size(node->right)); } int main() { struct node *root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); printf("Size of the tree is %d", size(root)); getchar(); return 0; }