定义TreeNode头结点
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
在TreeNode.h文件中创建常用方法
创建二叉树
int CreateTree(TreeNode *&root) {
int val; scanf("%d", &val); if(val<=0) { root = NULL; return 0; } root = (TreeNode *)malloc(sizeof(TreeNode)); if(val>0) { root->val = val; printf("请输入%d的左节点\n",val); CreateTree(root->left); printf("请输入%d的右节点\n",val); CreateTree(root->right); } return 0; }
先序遍历
void PreOrderTree(struct TreeNode* root) {
if (root == NULL) { return; } printf("%d ", root->val); PreOrderTree(root->left); PreOrderTree(root->right);
}
中序遍历
void InOrderTree(struct TreeNode* root) {
if (root == NULL) { return; } InOrderTree(root->left); printf("%d ", root->val); InOrderTree(root->right); }
后序遍历
void PostOrderTree(struct TreeNode* root) {
if (root == NULL) { return; } PostOrderTree(root->left); PostOrderTree(root->right); printf("%d ", root->val); }
二叉树的最大深度(LeetCode104)
int maxDeep(TreeNode* root) {
if (root == NULL) { return 0; } else { int maxleft = maxDeep(root->left),maxright = maxDeep(root->right); if(maxleft>maxright) { return maxleft+1; } else { return maxright+1; } } }
Main.cpp:
#include "TreeNode.h"
int main() {
TreeNode *root;
CreateTree(root);
PreOrderTree(root);
printf("\n");
InOrderTree(root);
printf("\n");
PostOrderTree(root);
int count=maxDeep(root);
printf("\n");
printf("%d",count);
}
运行结果:
3
请输入3的左节点
2
请输入2的左节点
2
请输入2的左节点
0
请输入2的右节点
0
请输入2的右节点
0
请输入3的右节点
8
请输入8的左节点
6
请输入6的左节点
5
请输入5的左节点
4
请输入4的左节点
0
请输入4的右节点
0
请输入5的右节点
0
请输入6的右节点
0
请输入8的右节点
0
前:3 2 2 8 6 5 4
中:2 2 3 4 5 6 8
后:2 2 4 5 6 8 3
最大深度:5
--------------------------------
Process exited after 18.06 seconds with return value 0
请按任意键继续. . .