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

时间:2020-05-16 15:10:55   收藏:0   阅读:62

问题

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

 

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

  (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;
             }
         }

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!