C语言二叉树

GA666666 2021-05-06 PM 28℃ 0条

定义TreeNode头结点

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;

};


在TreeNode.h文件中创建常用方法

  1. 创建二叉树

    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;
    }
    
  2. 先序遍历

    void PreOrderTree(struct TreeNode* root) {

          if (root == NULL) {
            return;
        }
        printf("%d ", root->val);
        PreOrderTree(root->left);
            PreOrderTree(root->right);

    }

  3. 中序遍历

    void InOrderTree(struct TreeNode* root) {

        if (root == NULL) {
            return;
        }
        InOrderTree(root->left);
        printf("%d ", root->val);
        InOrderTree(root->right);
    }
    
  4. 后序遍历

    void PostOrderTree(struct TreeNode* root) {

        if (root == NULL) {
            return;
        }
        PostOrderTree(root->left);
        PostOrderTree(root->right);
        printf("%d ", root->val);
    }
    
  5. 二叉树的最大深度(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
请按任意键继续. . .
标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~