二叉樹的一些操作具有天然的遞歸性,本文實現了獲取二叉樹的葉子總數、獲取二叉樹高度以及交換二叉樹的左右子樹,代碼均已編譯通過。
1.獲取二叉樹葉子總數:左子樹葉子總數+右子樹葉子總數
typedef struct BNode
{
char value; //類型假設爲char
struct BNode *left;
struct BNode *right;
} Node,*pNode,**ppNode;
int GetLeafeNum(pNode root)
{
if(root==NULL) //空節點葉子數爲0
{
return 0;
}
else if(root->left==NULL&&root->right==NULL)
{
return 1;
}
return GetLeafeNum(root->left)+GetLeafeNum(root->right);
}
2.獲取二叉樹高度:左右子樹高度較大的+1
int GetHeight(pNode root)
{
if(root==NULL)
{
return 0;
}
// max(left,right)+1; 左右子樹最高高度+1
return (GetHeight(root->left)>=GetHeight(root->right)?(GetHeight(root->left)+1):(GetHeight(root->right)+1));
}
3.交換左右子樹
void swap_tree(pNode root)
{
if(root==NULL)
return;
else
{
pNode temp=root->left;
root->left=root->right;
root->right=temp;
swap_tree(root->left);
swap_tree(root->right);
}
}