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

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

    分析
    首先注意要求的是一个排序的双向链表,从小到大,嗯,看到这里我就想到了二叉排序树的中序遍历,因为二叉排序树的中序遍历就是从小到大节点进行遍历的。
    在这里插入图片描述

    代码

    //节点类
    public class TreeNode {
    	int val = 0;
    	TreeNode left = null;
    	TreeNode right = null;
    
    	public TreeNode(int val) {
    		this.val = val;
    
    	}
    }
    
    
    //实现类
    public class Solution {
    	TreeNode head = null;
    	TreeNode realHead = null;
        public TreeNode Convert(TreeNode pRootOfTree) {
        	ConvertSub(pRootOfTree);
        	return realHead;
        }
        
        public void ConvertSub(TreeNode pRootOfTree) {
        	if(pRootOfTree == null) {
        		return;
        	}
        	
        	ConvertSub(pRootOfTree.left);
        	if(head == null) {     //遍历到树的最左叶子节点,也就是双向链表的头结点
        		head = pRootOfTree;      //缓存当前节点
        		realHead = pRootOfTree;   //指向双向链表的头结点
        	}
        	else {
        		head.right = pRootOfTree;  //head为是当前节点在双向链表中的前一个节点
        		pRootOfTree.left = head;
        		head = pRootOfTree;
        	}
        	
        	ConvertSub(pRootOfTree.right);
        }
    }
    
  • 相关阅读:
    Zookeeper java API
    Zookeeper 安装与配置
    Zookeeper 架构
    HBase 优化
    HBase 与 MapReduce 整合
    Hbase protobuf Java API
    HBase数据库设计
    Fork/Join并发处理框架
    并发容器Map
    Redis缓存穿透、缓存击穿和雪崩
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707705.html
Copyright © 2011-2022 走看看