将二叉搜索树转换为双向链表

2024-01-05

这个问题是在最近的一次编码采访中被问到的。

Q :给定一个二叉树,编写一个程序将其转换为双向链表。双向链表中的节点按照锯齿状层次顺序遍历形成的顺序排列

我的方法

我总是可以对树进行之字形级别顺序遍历并将其存储在数组中 然后创建一个双向链表。 但这个问题需要一个就地解决方案。 任何人都可以帮助解释应该使用递归方法吗?


这是递归方法。请注意,这里 root 将指向所形成的列表的某个中间元素。所以,只需从根部向后遍历即可得到头部。

#define NODEPTR struct node*

NODEPTR convert_to_ll(NODEPTR root){
    if(root->left == NULL && root->right == NULL)
        return root;
    NODEPTR temp = NULL;
    if(root->left != NULL){
        temp = convert_to_ll(root->left);
        while(temp->right != NULL)
            temp = temp->right;
        temp->right = root;
        root->left = temp;
    }
    if(root->right != NULL){
        temp = convert_to_ll(root->right);
        while(temp->left != NULL)
            temp = temp->left;
        temp->left = root;
        root->right = temp;
    }
    return root;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将二叉搜索树转换为双向链表 的相关文章

  • Java双向链表克隆方法

    我正在利用自己的时间编写一些数据结构 我注意到克隆方法没有按照我的预期复制列表 我将把我的结果发布在代码下面 因为主要方法位于类的底部附近 这是我到目前为止写的课程 public class DoublyLinkedList
  • 如何在java中实现循环双向链表add方法

    我正在循环 DoublyLinkedList 类以及 Node 内部类中实现 add E 方法 Node 应作为私有内部类实现 DoublyLinkedList 的 first 属性应指向列表中的第一个节点 它的 size 属性应该存储列表
  • 平衡二叉搜索树

    我需要构建一个平衡二叉搜索树 到目前为止 我的程序插入了从 1 到 26 的数字 但我的程序没有将其构建成平衡二叉搜索树 如果有人可以查看我的代码并帮助我 我将不胜感激 public class TreeNode TreeNode left
  • 在完整树的深度优先和广度优先遍历之间转换的函数

    问题 考虑一棵具有 l 层的完整 k 叉树 节点在广度优先遍历中按其等级标记 按照深度优先遍历中遍历标签的顺序计算标签列表 例如 对于 3 层的二叉树 所需的列表为 0 1 3 7 8 4 9 10 2 5 11 12 6 13 14 一种
  • 给定中序和后序遍历,如何输出树的前序遍历?

    给出当我在整数数组中具有先序和中序遍历时输出树的后序遍历的代码 如何使用给定的中序和后序数组来类似地获取前序 void postorder int preorder int prestart int inorder int inostart
  • 查找二叉搜索树中某个节点的父节点

    所以我想找到二叉树中一个Node的父节点 假设我通过文本文件在树中输入30 15 17 45 69 80 7 这棵树应该是 30 15 45 7 17 69 80 这是我的代码 Node BST searchforparentnode No
  • 2个二叉树是否相等[重复]

    这个问题在这里已经有答案了 可能的重复 判断两个二叉树是否相等 https stackoverflow com questions 1482822 determine if two binary trees are equal 昨天去面试了
  • 二叉搜索树到 inOrder 数组

    很简单的问题 如何递归地创建使用此构造函数的二叉搜索树数组 按顺序 public class OrderedSet
  • 增强数据结构而不浪费内存

    我有课Tree我想将其扩充为更专业的数据结构 例如Order tree and Interval tree 这些增强功能需要添加Node 例如大小信息 以及对某些算法的微小更改 我想知道在 C 中实现性能 可读性和可维护性方面的增强的最佳方
  • 如何仅从级别顺序遍历字符串构造二叉树

    考虑具有以下属性的二叉树 如果内部节点 非叶节点 有两个子节点 则其值为 1 叶节点的值为 0 因为它没有子节点 树上的级别顺序遍历将生成一串 1 和 0 通过在访问每个节点时打印奇怪的值 现在给定这个字符串构造二叉树并在树上执行后序遍历
  • 在 stat 方法之前检查权限以避免错误

    我第一次尝试遍历目录 但是stat由于似乎缺乏权限 某些目录会抛出错误 Error EPERM operation not permitted stat K System Volume Information 我想避免打电话stat首先在给
  • 转换二叉树中的嵌套列表的列表

    在 python 中 我有一个代表二叉树的嵌套列表列表 L 0 1 2 3 4 5 6 所以树可以如下所示 0 1 4 2 3 5 6 我现在想要实现一个函数 该函数将树的级别作为输入并返回该级别的所有节点 GetNodes 0 0 Get
  • 如何在不使用递归的情况下遍历二叉搜索树?

    我可以使用递归轻松遍历二叉搜索树 但我不知道如何在没有递归的情况下遍历二叉搜索树 所以请任何人解释一下 是的 你可以用堆栈来做到这一点 你必须在这里采用 stack 算法 以二叉搜索树的迭代方式 非递归方式 方法 进行预重排序 中序和后序遍
  • 是什么使得树遍历是前序的还是有序的?

    为什么通过根 左 右进行的树遍历称为前序 难道这不应该是有序的吗 因为根总是第一位的 对我来说 为什么这样称呼它没有意义 因为根始终是第一个元素 我们总是有这样的限制 左孩子在右孩子之前被访问 主要区别在于根在哪里 如果根是before两个
  • python 删除二叉搜索树中的节点

    下面的代码是我的二叉搜索树的实现 我想实现删除方法来删除节点 下面是我的实现 但是当我执行时 bst BSTRee bst insert 5 bst insert 11 bst insert 3 bst insert 4 bst inser
  • 为什么java TreeMap基于红黑树的实现?

    第三段维基百科关于 AVL 树的文章 http en wikipedia org wiki AVL tree说 因为 AVL 树更加严格平衡 所以对于查找密集型应用程序来说 它们比红黑树更快 所以 不应该TreeMap http docs
  • 如何让 PreOrder、InOrder、PostOrder 正常工作?

    如何让 PreOrder InOrder PostOrder 正常工作 这是我当前的代码和实现 请参阅 InOrder PreOrder PostOrder 我有来自 Geek4Geek 的参考 https www geeksforgeek
  • 计算产生相同 BST 的唯一节点序列的数量

    问题 给定一个最多 50 个整数的特定序列 它们代表 某个二叉搜索树 BST 的节点 有多少种排列 这个序列在那里 这也会产生完全相同的 空白石板时间 将原始序列作为 1 个序列包含在总计数中 例如 对于这样的序列 5 2 1 9 8 答案
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧

随机推荐