zoukankan      html  css  js  c++  java
  • 将二叉搜索树转换为双向链表

    问题

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

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

      (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;
                 }
             }
  • 相关阅读:
    Day 03
    Day 03 作业
    Day 02 作业
    Day 02
    Day 01
    Day 10 面向对象基础
    Spring学习-- Bean 的作用域
    一、基本知识
    cloud-init使用技巧
    如何在KVM中管理存储池
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12900553.html
Copyright © 2011-2022 走看看