二叉樹遍歷c++實現
//自己還真是個菜雞,大一學了一年c++,現在還在基礎的語法上轉圈,還沒有意識到c++真正的 //的強大之處在於它的多變,封裝,等演算法告一段落了在考慮是往Java上走還是深造c++ #include <iostream> #include <stack> #include <string> using namespace std; struct binode { char date; binode *lchild,*rchild; bool isfirst;//非遞迴後續遍歷要用到 }; class bitree { private: binode *root; public: bitree() { create(root); }; ~bitree(); binode *getroot() { return root; } void create(binode *jj)//建立二叉樹 { char aa; cin>>aa; if(aa==' ') jj=NULL; else { jj=new binode; jj->date=aa; create(jj->lchild); create(jj->rchild); jj->isfirst=true; } } void preordert(binode *a)//遍歷二叉樹--先序遍歷遞迴演算法 { cout<<a->date; preordert(a->lchild); preordert(a->rchild); } void preordernonrec(binode *aa)//非遞迴先序遍歷 { stack<binode *> s; s.push(aa);cout<<aa->date; while(!s.empty()) { while(aa->lchild) {aa=aa->lchild;s.push(aa);cout<<aa->date;}//到葉子節點 s.pop();//之後走該節點的第三步--判斷該節點的右子樹,出棧後aa仍有該節點地址 if(!aa->rchild) { aa=s.top()->rchild;//之前已經走過s.top節點的左子樹 s.pop();//這裡也要讓葉子節點的父母節點出棧 } else {aa=aa->rchild;s.push(aa);cout<<aa->date;} } } void ineordernonrec(binode *aa)//非遞迴中序遍歷 { stack<binode *> s; s.push(aa); while(!s.empty()) { while(aa->lchild) {aa=aa->lchild;s.push(aa);} cout<<aa->date;s.pop(); if(!aa->rchild) { cout<<s.top()->date; aa=s.top()->rchild; s.pop(); } else {aa=aa->rchild;s.push(aa);} } } /*從根節點開始遍歷左子樹到葉子節點,之後要遍歷節點的右子樹, 遍歷右子樹分為兩種情況,第一種右子樹為空,可以直接輸出,使 該節點出棧;第二種情況右子樹不空,(之前放入棧中的該節點已 經出棧)這時要把該節點第二次放入棧中,這裡就需要isfirst來標 記,之後按棧中順序輸出。*/ void posordernonrec(binode *aa)//非遞後先序遍歷 { stack<binode *> s; s.push(aa); while(!s.empty()) { while(!s.top()->isfirst) { cout<<s.top()->date; s.pop(); } while(aa->lchild) {aa=aa->lchild;s.push(aa);}//到葉子節點 s.pop(); if(!aa->rchild) { cout<<aa->date; s.pop(); } else { s.push(aa); aa->isfirst=false; aa=aa->rchild; s.push(aa); } } } } int main() { bitree bb; bb.preordert(bb.getroot()); return 0; }
相關推薦
二叉樹遍歷c++實現
//自己還真是個菜雞,大一學了一年c++,現在還在基礎的語法上轉圈,還沒有意識到c++真正的 //的強大之處在於它的多變,封裝,等演算法告一段落了在考慮是往Java上走還是深造c++ #include <iostream> #include <stack&
二叉樹遍歷-c實現
bin lib malloc code mage -a oid inf 樹遍歷 這裏主要是三種遍歷,先序(preorder,NLR),中序(Inorder,LNR),後序(Postorder,LRN) N:node,L:left,R:right 基本排序:先序(NLR,
二叉樹遍歷 C#
這就是 中序 工作 class stat public 完全 每一個 前期準備 二叉樹遍歷 C# 什麽是二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 (1)完全二叉樹——若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結
二叉樹遍歷C++(前、中、後序遍歷,層次遍歷、深度遍歷)
一.使用c++進行前中後遍歷,層次和深度遍歷(非遞迴) 二.程式碼 #include<iostream> #include<queue> #include<vector> #include<stack> using name
淺談完全二叉樹遍歷的實現
首先,什麼是二叉樹 定義:是一種特殊的樹形結構,每個節點至多隻有兩顆子樹,並且子樹有左右之分,其次序不能隨意顛倒,是有序樹的一種。 二叉樹是由一個根結點、兩棵互不相交的左子樹和右子樹組成。 那麼如何實現構造完全二叉樹,如何先序遍歷,中序遍歷,後序遍歷二叉樹 遍歷是要用到
二叉樹遍歷C++程式碼
/***********************二叉樹遍歷*********************/ #include <iostream> using namespace std; template<class Type> cla
c++實現二叉樹層序、前序創建二叉樹,遞歸非遞歸實現二叉樹遍歷
log ios cst ack ret 出棧 隊列 結點 非遞歸實現 #include <iostream> #include <cstdio> #include <stdio.h> #include <string> #i
二叉樹遍歷(C++實現)
二叉樹3種深度優先遍歷(遞迴、非遞迴)、層次遍歷,最簡潔、最好記! #include<iostream> #include<stack> #include<queue> using namespace std; //節點定義 struct Node { c
[二叉樹] 遍歷方法總結--遞迴與非遞迴--純C實現
非遞迴方法: 思路一:根據訪問次序來入棧並輸出 思路二:模擬訪問過程 思路三:使用識別符號mark來記錄已經第幾次訪問該結點 /* @Desc:二叉連結串列 無頭結點 @Vesrion:0.0.1 @Time:20180922建立 */ #include
二叉樹遍歷的c++具體實現
樹的資料結構如下: struct TreeNode{ int val; TreeNode* left; TreeNode* right; };一、先序遍歷 按照“根結點-左孩
c語言使用指標實現二叉樹遍歷
使用指標實現二叉樹的定義,建立,以及前序遍歷,中序遍歷,後續遍歷。 /* 該程式實現了二叉樹的建立,以及樹的遍歷,前序遍歷,中序遍歷,後序遍歷。 */ #include <stdio.h> #include<stdlib.h> #include &
非遞迴實現二叉樹遍歷(附c++完整程式碼)
先序、中序和後序遍歷過程:遍歷過程中經過結點的路線一樣,只是訪問各結點的時機不同。 從圖中可以看到,前序遍歷在第一次遇見元素時輸出,中序遍歷在第二次遇見元素時輸出,後序遍歷在第三次遇見元素時輸出。 非遞迴演算法實現的基本思路:使用堆疊 一、前序遍歷 1、遞迴實
STL實現二叉樹遍歷
nod 數據 blog new friend const turn ace lrn #include<iostream> using namespace std; template<class Type> class BSTree; templat
二叉樹——遍歷篇(c++)
比較 方便 || 遍歷二叉樹 找到 保存 們的 order out 二叉樹——遍歷篇 二叉樹很多算法題都與其遍歷相關,筆者經過大量學習並進行了思考和總結,寫下這篇二叉樹的遍歷篇。 1、二叉樹數據結構及訪問函數 #include <stdio.h> #includ
【樹】二叉樹遍歷算法(深度優先、廣度優先遍歷,前序、中序、後序、層次)及Java實現
order new link left 算法 很多 == 都是 off 二叉樹是一種非常重要的數據結構,很多其它數據結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有深度遍歷和廣度遍歷,深度遍歷有前序、中序以及後序三種遍歷方法,廣度遍歷即我們平常所說的層次遍歷。因為樹的定義
二叉樹遍歷:前序,中序,後序,層序的遞迴以及非遞迴實現
樹,是一種在實際程式設計中經常遇到的資料結構,它的邏輯很簡單:除根節點之外每個節點都有且只有一個父節點,除葉子節點之外所有節點都有一個或多個子節點。我們說的二叉樹,就是指子節點最多2個的樹。 二叉樹中,最重要的操作就是遍歷。二叉樹的遍歷分為: 1.前序遍歷:先訪問根節點,
二叉樹遍歷的非遞迴演算法實現
linux c++ 模板類 討論範圍 本部落格只實現二叉樹非遞迴演算法的遍歷,請自行學習二叉樹和模板類等相關知識。程式碼中附帶大量註釋,所以就不在進行詳細說明。 中序遍歷 template <typename T>void Post<T>
二叉樹遍歷的python實現(前序、中序、後序)
實現二叉樹的三種遍歷方式,未完善二叉樹的生成、樹的程式遍歷等,本程式僅做記錄,程式中構造的二叉樹結構如下: # -*- coding: utf-8 -*- """ Created on Thu Sep 13 16:46:46 2018 Description:二叉樹
二叉樹遍歷演算法(遞迴實現先序中序和後續遍歷)(非遞迴實現中序和先續)
二叉樹遍歷 這兩天抓緊把二叉樹遍歷複習了一遍,遞迴實現還是一如既往地簡潔,迭代版本寫了好久還是隻實現了先序和中序,後續一直沒搞明白,有空了再更新。 遞迴實現 void RecursionBackTree(TreeNode * root) {
二叉樹遍歷(四種方式、迭代及遞迴的實現)
二叉樹的常見遍歷方式主要有前序,中序和後序,以及層次遍歷(從上到下,從左到右)四種方法。 前、中、後遍歷分別順序如下: 分別通過遞迴和迴圈的方式實現(Python): # -*- coding:utf-8 -*- class TreeNode: def __