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

Posted dream-flying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将二叉搜索树转换为双向链表相关的知识,希望对你有一定的参考价值。

问题

  输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

 

分析:二叉搜索树的中序遍历将得到升序结果。

  (1)使用List结构记录中序遍历结果.

  (2)将list中的元素构建为双向链表。

 

code

public TreeNode Convert(TreeNode pRootOfTree) {
         //存储中序遍历结果
         if(pRootOfTree == null) {
             return null;
         }
         ArrayList<TreeNode> list = new ArrayList<>();
         midSearchTree(pRootOfTree,list);
         TreeNode head = list.get(0);
         TreeNode agent = head;
         for(int i=1;i<list.size();i++) {
             TreeNode newNode = list.get(i);
            agent.right = newNode;
            newNode.left = agent;
            agent = newNode;
         }
         return head;
         
         
     }
     //二叉树的中序遍历
     public void midSearchTree(TreeNode root,ArrayList<TreeNode> list) {
         if(root!=null) {
             midSearchTree(root.left,list);
             list.add(root);
             midSearchTree(root.right,list);
         }
         
     }
     
    //树节点结构
     public void insert(TreeNode root,int target) {
         if(target<root.val) {
             if(root.left!=null) {
                 insert(root.left,target);
             }else {
                 TreeNode node = new TreeNode(target);
                 root.left = node;
             }
         }

 

以上是关于将二叉搜索树转换为双向链表的主要内容,如果未能解决你的问题,请参考以下文章

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

将二叉查找树转换成有序双向链表

LeetCode(算法)- 426. 将二叉搜索树转化为排序的双向链表

将二叉搜索树转变成排序的双向链表

如何将二叉树就地转换为二叉搜索树,即我们不能使用任何额外的空间

26.二叉搜索树与双向链表