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

    题目描述:

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

    思路分析:

      要将二叉搜索树转换为一个排序的双向链表,且不能创建新的节点。首先要求是排序的,那么由于二叉搜索树的特殊性,只要我们中序遍历二叉树,就能得到有序序列,然后我们可以将每个节点的指向左右孩子的指针,改成指向前节点和后节点。这样就可以实现题目要求,我们可以先用队列保存中序遍历后节点的顺序。然后改变每个节点的left,right指针,得到排序的双向链表。

    代码:

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    import java.util.*;
    public class Solution {
        public TreeNode Convert(TreeNode pRootOfTree) {
            //第一步;先将中序遍历的节点保存在队列中
            Queue<TreeNode>q=new LinkedList<>();
            saveNodes(pRootOfTree,q);
            if(q.isEmpty())
                return null;
            TreeNode pNode=q.poll();
            TreeNode root=pNode;    //保存链表头
            TreeNode pre=pNode;
            pre.left=null;          //链表头的前指针为空
            while(!q.isEmpty()){
                pNode=q.poll();
                pre.right=pNode;
                pNode.left=pre;
                pre=pNode;
            }
            return root;
        }
        public void saveNodes(TreeNode root,Queue<TreeNode>q){
            if(root!=null){
            saveNodes(root.left,q);
            q.offer(root);
            saveNodes(root.right,q);
            }
        }
    }
    
  • 相关阅读:
    ResourceManager总体架构
    Yarn聚合日志
    Hive参数配置方法
    Hive任务日志及日志调试
    bugku web web3
    bugku web 矛盾
    bugku web web基础
    Bugku 杂项 眼见非实
    Bugku 杂项 啊哒
    JarvisOJ Basic Help!!
  • 原文地址:https://www.cnblogs.com/yjxyy/p/10759841.html
Copyright © 2011-2022 走看看