linked-list - 将 BST 转换为前序链表和后序链表

标签 linked-list binary-search-tree in-place preorder postorder

这是第二轮亚马逊面试问题。将给定的二叉搜索树转换为前序和后序链表,并且此转换必须就地

最佳答案

下面的代码是为了在不使用堆栈的情况下以预序遍历形式对二叉树进行扁平化而编写的。它采用前序遍历递归的方式。在此,TreeNode[] arr 将保存我正在更新该节点的右指针的最后一个最左边的节点值。

    public TreeNode preorderNode(TreeNode root,TreeNode[] arr)
    {
    if(root==null)
        return null;
    if(root!=null && root.left==null && root.right==null)    
        {
            arr[0]=root;
            return root;
        }
    TreeNode temp=root.right;
    if(root.left!=null)
        root.right=preorderNode(root.left,arr);
    else arr[0]=root;
    root.left=null;
    arr[0].right=preorderNode(temp,arr);
    return root;
    }
    public void flatten(TreeNode root) {

        if(root==null || (root.left==null && root.right==null))
            return;
        TreeNode temp=root.right;    
        TreeNode[] arr=new TreeNode[1];
        arr[0]=null;
        if(root.left!= null)
            root.right=preorderNode(root.left,arr);
        else
            arr[0]=root;
        root.left=null;
       arr[0].right=preorderNode(temp,arr);
   }

关于linked-list - 将 BST 转换为前序链表和后序链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24961563/

相关文章:

c - 访问嵌套结构

c - 链表不打印所有值

c - 将数百万个元素插入二叉搜索树 BST

c - C中如何进行就地计算

python - 直接在函数中更改对象在Python中是反模式吗?

python - 随机播放 python 数组中的某些项目

c++ - 在C++中是否有任何用于链表的内置函数,其功能类似于Java提供的indexOf函数?

java - 将对象添加到队列后访问对象变量?

c - 递归法计算二叉树高度的原理是什么?

c - 写入 bst 中的前 n 个元素