遞迴和非遞迴的方法往二叉排序樹中插入新的節點

來源:互聯網
上載者:User

       今天在回寢室的路上同學跟我討論往二叉排序樹中插入新的節點,我一想這不很簡單嗎,回到寢室立馬寫了個程式讓他看,他一看說我要的是遞迴的方法。我一想遞迴的話,每次調用函數不都插入了一個新節點,那不建立成一顆二叉排序樹了嗎,不是插入一個節點。我又看了一下非遞迴的方法,發現當根為空白時直接將建立的節點p賦給根節點t,這主要用到了引用賦值的原理,對,我可以利用引用的原理。(1)當根為空白時,直接將根 t 賦值為建立的節點指標返回 (2) 當根節點的值大於要插入節點的值時,遞迴的將建立的節點插入到根節點的左子樹的合適位置
(3)否則,遞迴的將建立的節點插入到根節點的右子樹的合適位置 。

   具體代碼如下:

// 二叉樹的建立.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include <iostream>using namespace std;//定義二叉排序樹的節點typedef struct Node{   int data;   struct Node * lchild;//左孩子   struct Node * rchild;//右孩子}Node,* PNode;PNode T=NULL;//二叉排序樹的根節點//中序遍曆二叉樹void MidSequence(PNode t){   if(t!=NULL)   {      MidSequence(t->lchild);  cout<<t->data<<" ";  MidSequence(t->rchild);   }}//往二叉排序樹中插入一個新節點(非遞迴實現)void  CreateBSortTree(PNode & t,int data){   //建立一個新節點   PNode p=(PNode)malloc(sizeof(Node));   p->data=data;   p->lchild=NULL;   p->rchild=NULL;   if(t==NULL)   {      t=p;  return;   }   PNode q=t,parent;   do{    parent=q;    if(parent->data>data)q=parent->lchild;elseq=parent->rchild;   }while(q!=NULL);   if(parent->data>data)      parent->lchild=p;   else   parent->rchild=p;}//往二叉排序樹中插入一個新節點(遞迴實現)void  CreateBSortTree2(PNode & t,int data){  if(t==NULL)  {  //建立一個新節點  PNode p=(PNode)malloc(sizeof(Node));      p->data=data;      p->lchild=NULL;      p->rchild=NULL;  t=p;  return;  }  else if(t->data>data)     CreateBSortTree2(t->lchild,data);  else     CreateBSortTree2(t->rchild,data);}//測試int _tmain(int argc, _TCHAR* argv[]){int a[]={0,5,8,4,2,3,10};int len=sizeof(a)/sizeof(int);for(int i=0;i<len;i++){  CreateBSortTree2(T,a[i]);}    MidSequence(T);system("PAUSE");return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.