美文网首页
二叉树求直径

二叉树求直径

作者: Sweet丶 | 来源:发表于2020-10-11 22:30 被阅读0次

    给定一个二叉树,写代码传入根节点后求出直径?二叉树的直径是任意两个节点之间的最远距离。

          1
         / \
        2   3
       / \     
      4   5
    

    如上面二叉树的直径为:3.

    分析:求二叉树的直径就是求二叉树根节点左右子树的高度之和。
    以下是实现的代码:

    // 节点
    typedef struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
    }BiTreeNode, *BiTree;
    
    
    // 按照中序遍历的方式创建二叉树
    void createBiTree(BiTree *root){
        int value;
        
        scanf("%d", &value);
        if (value != -1) {
            
            *root = (BiTreeNode *)malloc(sizeof(BiTreeNode));
            (*root)->val = value;
            createBiTree(&(*root)->left);
            createBiTree(&(*root)->right);
        } else{
            *root = NULL;
        }
    }
    
    int getHeight(BiTreeNode *root){
        if (root == NULL) {
            return 0;
        }
        int leftH = getHeight(root->left);
        int rightH = getHeight(root->right);
        return MAX(leftH, rightH) + 1;
    }
    
    // 求二叉树的直径: 左子树的高度 + 右子树的高度,
    int getTreeDiameter(BiTreeNode *root){
        if (root == NULL) {
            return 0;
        }
        int leftHeight = getHeight(root->left);
        int rightHeight = getHeight(root->right);
        
        return leftHeight + rightHeight;
    }
    
    

    测试代码:

    printf("请按照前序遍历方式输入二叉树:\n");
    BiTree root = NULL;
    createBiTree(&root);
    
    int diameter = getTreeDiameter(root);
    printf("二叉树的直径为:%d", diameter);
    putchar('\n');
    

    相关文章

      网友评论

          本文标题:二叉树求直径

          本文链接:https://www.haomeiwen.com/subject/zxjypktx.html