商量: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
到達預期後果。