zoukankan      html  css  js  c++  java
  • 剑指Offer--二叉搜索树与双向链表

    题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
    思路 根据二叉搜索树的特点,通过中序遍历得到的是有序的。
    自己写的low代码

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    import java.util.ArrayList;
    public class Solution {
        public TreeNode Convert(TreeNode pRootOfTree) {
         ArrayList<TreeNode> nodes =new ArrayList<TreeNode>();//保存所有的节点;
    	        //由于是二叉搜索树,所以采用中序遍历;
    		 midTraveral(pRootOfTree,nodes);
    		
    		 //重新构建双向链表;
    		if(!nodes.isEmpty()) {
    			 TreeNode p = nodes.get(0);//移动指针;
    			
    			 for(int i=1;i<nodes.size();i++) {
    			
    				 p.right = nodes.get(i);
    				 nodes.get(i).left = p;
    				
    				 p=nodes.get(i);
    				 
    			 }
    			 //头和尾;
    			 nodes.get(nodes.size()-1).right = null;
    			nodes.get(0).left = null;
    			 return nodes.get(0);
    			 
    		}else {
    			return null;
    		}
    		
    		
    	    }
    	 
    	 //中序遍历;
    	 private void midTraveral(TreeNode root,ArrayList<TreeNode>list) {
    		if(root==null) {
    			return ;
    		}
    		midTraveral(root.left,list);
    		list.add(root);
    		midTraveral(root.right,list);
    		
    	 }
    }
    
    多思考,多尝试。
  • 相关阅读:
    Linux安装.net core
    在IIS中如何配置SSL(https)
    Lambda的前世今生
    Java建造者模式
    leetcode 83 Remove Duplicates from Sorted List
    【设计】Office
    【设计】简书品牌重构
    【设计总结】
    【交互设计】
    【设计总结】
  • 原文地址:https://www.cnblogs.com/LynnMin/p/9390721.html
Copyright © 2011-2022 走看看