zoukankan      html  css  js  c++  java
  • 每天一道算法题(8)——把二元查找树转变成排序的双向链表


           题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。比如将二元查找树

    10
    /
    6 14
    / /
      4 81216
          转换成双向链表4=6=8=10=12=14=16


    1.思路

           使用递归法。注意由于需要改变指针的指向,因此使用了指针引用。


    2.代码

    #include"iostream"
    using namespace std;
    struct Node // a node in the binary search tree
    {
      int value; // value of node
      Node* left; // left child of node
      Node* right; // right child of node
    };
    
    bool createList(Node* Head,Node* &left,Node* &right){
          
    	  left=Head;
    	  right=Head;
    	  
          if(!Head)
    	        return false;
    	  else{
    	   Node*l1,*r1,*l2,*r2;
    	   l1=NULL;
    	   r1=NULL;
    	   l2=NULL;
    	   r2=NULL;
    	   if(createList(Head->left,l1,r1)){
    		   	Head->left=r1;
    			r1->right=Head;
    			left=l1;
    	   }
    	   if(createList(Head->right,l2,r2)){
    		   	Head->right=l2;
    			l2->left=Head;
    			right=r2;
    	   }
    	  return true;
    	}
    }
    
    void main(){
    	Node n4={4,NULL,NULL};
    	Node n5={8,NULL,NULL};
    	Node n6={18,NULL,NULL};
    	Node n2={6,&n4,&n5};
    	Node n3={14,NULL,&n6};
    	Node n1={10,&n2,&n3};
    
    	Node*Left=NULL;
    	Node*Right=NULL;
    
    	createList(&n1,Left,Right);
    	while(Left){
    		cout<<Left->value<<endl;
    		Left=Left->right;
    	}
    }
    





  • 相关阅读:
    ionic之样式bar-assertive
    (?m) 可以让.去匹配换行
    perl 正则前导字符
    ionic之样式bar-energized
    ionic之样式bar-balanced
    ionic之样式bar-calm
    perl /m
    sort_buffer_size:
    Filter plugins ? mutate:
    Codec plugins ? multiline
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393043.html
Copyright © 2011-2022 走看看