程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 商量:C++完成鏈式二叉樹(用非遞歸方法先序,中序,後序遍歷二叉樹)

商量:C++完成鏈式二叉樹(用非遞歸方法先序,中序,後序遍歷二叉樹)

編輯:關於C++

商量:C++完成鏈式二叉樹(用非遞歸方法先序,中序,後序遍歷二叉樹)。本站提示廣大學習愛好者:(商量:C++完成鏈式二叉樹(用非遞歸方法先序,中序,後序遍歷二叉樹))文章只能為提供參考,不一定能成為您想要的結果。以下是商量:C++完成鏈式二叉樹(用非遞歸方法先序,中序,後序遍歷二叉樹)正文


本文匯總了經常使用的DateTime日期類型格局化顯示辦法,便利讀者在應用的時刻參考自創一下。詳細以下所示:

1.綁准時格局化日期辦法:

<ASP:BOUNDCOLUMN DATAFIELD= "JoinTime " DATAFORMATSTRING= "{0:yyyy-MM-dd} " >
<ITEMSTYLE WIDTH= "18% " > </ITEMSTYLE >
</ASP:BOUNDCOLUMN >

2.數據控件如DataGrid/DataList等的件格局化日期辦法:

e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();

3.用String類轉換日期顯示格局:

String.Format( "yyyy-MM-dd ",yourDateTime);

4.用Convert辦法轉換日期顯示格局:

Convert.ToDateTime("2005-8-23").ToString("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支撐繁體數據庫

5.直接用ToString辦法轉換日期顯示格局:

DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")

或:

DateTime.Now.ToString("yyyyMMddhhmmss");

6.只顯示年代

DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")

7.顯示時光一切部門,包含:年代日時分秒

<asp:BoundColumn DataField="收款時光" HeaderText="收款時光" DataFormatString="{0:yyyy-MM-dd HH24:mm:ss}">
</asp:BoundColumn> 

8.格局化從數據庫中讀取的時光

Convert.ToDateTime(dr["MT_ENDate"]).ToShortDateString();
;  bt->data =ch;
     cout<<"挪用左孩子"<<endl;
     Create(bt->lchild );
     cout<<"挪用右孩子"<<endl;
     Create(bt->rchild );
    }
}
/************************************************************************
辦法:中序遍歷(非遞歸情勢)
思惟:向左走到止境,入棧。出棧,拜訪節點,向右一步
************************************************************************/
template <class T>
void BiTree<T>::InOrderTraverse()
{
 stack<BiNode<T>*> sta; //界說一個寄存BiNode型指針的空棧
 BiNode<T>* p = root;
 sta.push(p);   //將根指針入棧
 while(!sta.empty())
 {
  while (NULL != p)
  {//向左走到止境,並保存所經由的節點指針,入棧
   p = p->lchild;
   if (NULL != p)
   {
    sta.push(p);
   }
  }
  if (!sta.empty())
  {
   p = sta.top(); 
   cout << p->data << " ";  //拜訪棧頂元素,
   sta.pop();     //棧頂元素出棧
   p = p->rchild;  //向右一步 
   if (NULL != p)
   {
    sta.push(p);
   }
  }  
 }
}
/************************************************************************
辦法:先序遍歷(非遞歸情勢)
思惟:向左走到止境,入棧,拜訪節點。出棧,向右一步
************************************************************************/
template<class T>
void BiTree<T>::PreOrderTraverse()
{
 stack<BiNode<T>*> sta;
 BiNode<T>* p = root;
 sta.push(p);   //將根指針入棧
 while(!sta.empty())
 {
  while (NULL != p)
  {//向左走到止境,並保存所經由的節點指針,入棧
   cout << p->data << " ";
   p = p->lchild;
   if (NULL != p)
   {
    sta.push(p);
   } 
  }
  if (!sta.empty())
  {
   p = sta.top(); 
   sta.pop();     //棧頂元素出棧
   p = p->rchild;  //向右一步 
   if (NULL != p)
   {
    sta.push(p);
   }
  }  
 }
}
/************************************************************************
 後序遍歷(非遞歸情勢)                                              
 思惟:從根節點開端,向左走到止境,並入棧,同時設置標記位為1.
 出棧時假如這個節點有右子樹,則斷定是第幾回拜訪,假如是第1次拜訪,
 則不出棧,將標記位改成2;假如是第二次拜訪,則出棧。

************************************************************************/
template<class T>
void BiTree<T>::PostOrderTraverse()
{
 stack<BiNode<T>*> sta; //寄存節點指針的棧
 stack<int> flagsta;  //寄存標記位的棧,每出(入)一個節點指針,同步出(入)一個標記位
 unsigned flag;  //設置標記位,1-第一次拜訪,2-第二次拜訪
 BiNode<T>* p = root;
 sta.push(p);   //將根指針入棧
 flagsta.push(1);
 while(!sta.empty())
 {
  while (NULL != p && NULL != p->lchild)
  {//向左走到止境,並保存所經由的節點指針,入棧
   p = p->lchild;
   sta.push(p);
   flagsta.push(1);
  }
  if (!sta.empty())
  {
   flag = flagsta.top();
   flagsta.pop();
   p = sta.top();
   if ((NULL != p->rchild) && flag == 1 )
   {//假如右子樹不空,且是第一次拜訪
    flagsta.push(2);   //第一次拜訪時元素不出棧,但將標記位設置為2 
    p = p->rchild;    //向右一步
    sta.push(p);
    flagsta.push(1);
   }
   else
   {
    sta.pop(); //元素出棧
    cout << p->data << " ";  //拜訪棧頂元素
    p = NULL; //將指針置為空
   }  
  }  
 }
}


//測試法式
void main()
{
    BiTree<int> a;
 cout << "The InOrderTraverse is: " ;
 a.InOrderTraverse();
 cout << endl;
 cout << "The PreOrderTraverse is: " ;
 a.PreOrderTraverse();
 cout << endl;
 cout << "The PostOrderTraverse is: " ;
 a.PostOrderTraverse();
 cout << endl;
}

當在鍵盤上一次輸出3,2,5,0,0,4,0,0,6,0,0,(這裡逗號代表現實輸出時的回車鍵),即結構了二叉樹
          3
     2      6
5     4
輸入:
root=3
The InOrderTraverse is: 5 2 4 3 6
The PreOrderTraverse is: 3 2 5 4 6
The PostOrderTraverse is: 5 4 2 6 3
到達預期後果。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved