目录
Main函数
二叉树第K层的节点个数
整体思路
分析理解
注意事项
二叉树查找值为x的节点
整体思路
分析理解
注意事项
Main函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<math.h>//二叉树节点结构体
typedef int BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;//
}BTNode;//手动建造一个二叉树
//放入数据,左右置为NULL
BTNode* BuyNode(int x)
{BTNode* tmp = (BTNode*)malloc(sizeof(BTNode));assert(tmp);if (tmp == NULL){perror("malloc fail");return;}tmp->data = x;tmp->left = NULL;tmp->right = NULL;return tmp;
}//放入数据链接成树
BTNode* CreatBinaryTree()
{BTNode* node1 = BuyNode(1);BTNode* node2 = BuyNode(2);BTNode* node3 = BuyNode(3);BTNode* node4 = BuyNode(4);BTNode* node5 = BuyNode(5);BTNode* node6 = BuyNode(6);//BTNode* node7 = BuyNode(1);node1->left = node2;node1->right = node4;node2->left = node3;node4->left = node5;node4->right = node6;return node1;
}//前序
void PreOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}printf("%d ", root->data);//根PreOrder(root->left);//左PreOrder(root->right);//右
}
int main()
{BTNode* root = CreatBinaryTree();int treeKsize=BinaryTreeLevelKSize(root, 3);printf("%d ", treeKsize);printf("\n");PreOrder(root);BTNode* FindX = BinaryTreeFind(root, 5);FindX->data = 7;printf("\n");PreOrder(root);return 0;
}
二叉树第K层的节点个数
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL){return 0;}if (k == 1)//到第k层就回归{return 1;}return BinaryTreeLevelKSize(root->left, k - 1) + BinaryTreeLevelKSize(root->right, k - 1);
}
整体思路
- 分治思想
- 若为空树/k=0则返回0
- 若k=1则返回1
- 若k既不等于0也不等于1 则返回左子树的k-1层+右子树的k-1层
- 整个树的第k层节点个数=左子树的k-1层节点个数+右子树的k-1层节点个数
分析理解
注意事项
- 注意返回值return 是返回给上一层的递归下来的函数,不是返回给最外面
- 一个一个调用,不是一起调用
- 递归调用到某一个函数内,这个函数内的变量是不变的例如K,node2这样的变量
二叉树查找值为x的节点
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL){return NULL;}if (root->data == x){return root;}BTNode* left = BinaryTreeFind(root->left, x);if (left){return left;}BTNode* right = BinaryTreeFind(root->right, x);if (right){return right;}return NULL;
}
整体思路
- 遍历一遍二叉树,查找值为x的节点地址,返回给Main函数
- 若为空树,则返回NULL
- 若值相等则返回地址给上一层函数。
- 上一层函数接收再返回给上一层直到返回为Main函数。
分析理解
注意事项
- 注意返回值return 是返回给上一层的递归下来的函数,不是返回给最外面
- 一个一个调用,不是一起调用
- 递归调用到某一个函数内,这个函数内的变量是不变的例如node2这样的变量
- 要修改某函数内的值必须传地址修改
- 返回值必须有变量接收
🙂感谢大家的阅读,若有错误和不足,欢迎指正。下篇开始我们开始练习二叉树的OJ题目。