📌  相关文章
📜  从其链表表示构造完整的二叉树(1)

📅  最后修改于: 2023-12-03 15:06:33.743000             🧑  作者: Mango

从链表表示构造完整的二叉树

简介

二叉树是一种常用的树形结构,具有广泛的应用。常见的构造方式有顺序存储和链式存储两种。其中,链式存储方式最简单的一种是链表表示法。链表表示法将二叉树的每个节点表示为一个结构体,该结构体包含一个指向左子树的指针和一个指向右子树的指针。本文介绍如何从链表表示构造完整的二叉树。

问题描述

给定一个二叉树的链表表示法,如何构造出该二叉树的完整表示法。

解决方案

二叉树的链表表示法包含一个指向左子树的指针和一个指向右子树的指针。因此,我们可以通过遍历链表来构造二叉树的完整表示法。具体实现如下:

  1. 遍历链表,依次获取每个节点
  2. 若当前节点为NULL,则返回NULL
  3. 新建一个节点,将其值赋为当前节点的值
  4. 递归构造左子树和右子树
  5. 将新建的节点的左子树指针指向左子树的根节点
  6. 将新建的节点的右子树指针指向右子树的根节点
  7. 返回新建的节点

具体实现代码如下:

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x): val(x), left(NULL), right(NULL) {}
};

TreeNode *constructFromList(ListNode *head) {
    if (head == NULL) return NULL;
    TreeNode *root = new TreeNode(head->val);
    root->left = constructFromList(head->next);
    root->right = constructFromList(head->next);
    return root;
}
总结

本文介绍了如何从链表表示构造出完整的二叉树。具体实现中,通过遍历链表递归构造左右子树,然后将左右子树根节点指针赋值给父节点的指针,最终构造出完整的二叉树。这种算法的时间复杂度为O(n),其中n为二叉树节点个数。