还原二叉树

给定一棵二叉树的前序遍历序列和中序遍历序列,要求计算该二叉树的高度。

输入格式:

输入首先给出正整数 n(≤50),为树中结点总数。随后 2 行先后给出前序和中序遍历序列,均是长度为 n 的不包含重复英文字母(区别大小写)的字符串。

输出格式:

输出为一个整数,即该二叉树的高度。

输入样例:

9
ABDFGHIEC
FDHGIBEAC

输出样例:

5

代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNode{
    char data;//储存节点的数据
    struct TreeNode *left;//指向左子树
    struct TreeNode *right;//指向右子树
} TreeNode;


/**
 * 
 * 计算二叉树的高度
*/
int getHeight(TreeNode *root) {
    if (root == NULL) {
        return 0;//二叉树为空,则返回0
    } else {
        int leftHeight = getHeight(root->left);
        int rightHeight = getHeight(root->right);
        
        return (leftHeight > rightHeight) ? (leftHeight + 1) : (rightHeight + 1);
    }
}

/**
 * 
 * 构建二叉树
*/
TreeNode* buildTree(char *preorder, char *inorder, int size) {
    if (size <= 0) {
        return NULL;
    }
    
    TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
    root->data = *preorder;
    root->left = root->right = NULL;
    
    char *rootInOrder = inorder;
    while (*rootInOrder != *preorder) {
        rootInOrder++;
    }
    
    int leftSize = rootInOrder - inorder;
    
    root->left = buildTree(preorder + 1, inorder, leftSize);
    root->right = buildTree(preorder + 1 + leftSize, rootInOrder + 1, size - leftSize - 1);
    
    return root;
}

int main() {
    int n;
    scanf("%d", &n);
    
    char preorder[n+1];
    char inorder[n+1];
    
    scanf("%s", preorder);
    scanf("%s", inorder);
    
    TreeNode *root = buildTree(preorder, inorder, n);
    
    int height = getHeight(root);
    printf("%d\n", height);
    
    return 0;
}

 

相关推荐

  1. 还原

    2024-03-30 21:06:01       42 阅读
  2. 先序+中序还原【数据结构】

    2024-03-30 21:06:01       65 阅读
  3. LeetCode——

    2024-03-30 21:06:01       54 阅读
  4. <span style='color:red;'>二</span><span style='color:red;'>叉</span><span style='color:red;'>树</span>

    2024-03-30 21:06:01      53 阅读
  5. c++

    2024-03-30 21:06:01       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-30 21:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-30 21:06:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-30 21:06:01       82 阅读
  4. Python语言-面向对象

    2024-03-30 21:06:01       91 阅读

热门阅读

  1. Python基础入门 --- 8.文件

    2024-03-30 21:06:01       40 阅读
  2. Redisson 实现分布式锁

    2024-03-30 21:06:01       49 阅读
  3. 浅谈Spring中的JoinPoint MethodSignature Signature

    2024-03-30 21:06:01       39 阅读
  4. Markdown渲染器csp

    2024-03-30 21:06:01       40 阅读
  5. day2链表

    2024-03-30 21:06:01       36 阅读
  6. 每日一题 --- 两数之和[力扣][Go]

    2024-03-30 21:06:01       51 阅读
  7. 解释Python中的可变类型和不可变类型

    2024-03-30 21:06:01       42 阅读
  8. 栈,队列,堆,树

    2024-03-30 21:06:01       33 阅读
  9. 测试开发岗 - 常见面试题(一)

    2024-03-30 21:06:01       41 阅读