存在記憶體洩漏,,,,原因是沒有銷毀結點時記憶體釋放的處理.
#include
#include
#include
#include
using
namespace
std;
class cbtnode
;typedef cbtnode btnode;
class cbtroot
void xianxubianli1()//遞迴形式的先序遍歷
private:
void xianxubianli1(btnode *node)
public:
/*非遞迴形式的遍歷,都是通過棧來完成的.比如先序遍歷當節點出棧的時候要先將該節點的右孩子入棧然後在入左孩子...
*中序遍歷的話先不斷的將左孩子入棧,當左孩子出棧的時候如果父親有右孩子,那麼就將右孩子的左孩子不斷入棧.
沒有的話就不斷出棧知道右孩子不為空..
*後序遍歷則是在中序的基礎上需要了乙個標誌位,如果該節點的右孩子沒有遍歷才遍歷,遍歷過了就直接出棧.
*/void xianxubianli2()
}void zhongxubianli1()
while (!node_stack.empty())}}
}void houxubianli1()
while (!node_stack.empty())
else}}
}//層次遍歷則是乙個佇列來完成的,很簡單不說了.
void cengcibianli()
}private:
btnode * search(char);
void settree(string &s);
cbtnode * root;
};typedef cbtroot btroot;
btnode * buynode(char data, btnode*l, btnode *r, btnode * p)
btnode * btroot::search(char key)
else
}if (tmp != nullptr)
return par;
}void btroot::settree(string &s)
else
}}int main()
; //這是一棵二叉搜尋樹....
btroot *root = new btroot(str);
root->cengcibianli();//層次遍歷
return
0;}
非遞迴實現樹的前中後遍歷
銜接bst樹的 可以放在一起執行測試 非遞迴先序 先根遍歷的基本思想就是 輸出自己,輸出左子樹,輸出右子樹。從根節點出發,向左依次輸出並進棧,當左孩子為空時,指標指向棧頂的右子樹,然後出棧,對右子樹進行遍歷。void pre output stack node root 到了從根節點出發,最左邊的節...
二叉樹遍歷實現(前中後層次 遞迴非遞迴)
一.前序遍歷 include include includeusing namespace std struct binarytreenode 遞迴實現 void preorder1 binarytreenode proot if proot m pright nullptr 非遞迴實現 void ...
樹的遍歷(先中後序,非遞迴,層次遍歷)
樹的遍歷分為先序遍歷,中序遍歷以及後續遍歷。其中分為遞迴形式與非遞迴形式,及層次遍歷。先序遍歷 首先訪問根節點,然後訪問左子樹,最後訪問右子樹。void preorder bitree t 中序遍歷 首先訪問左子樹,然後訪問根節點,最後訪問右子樹。void inorder bitree t 後序遍歷...