#include#include#includeusing namespace std;
//定義二叉樹的節點資料型別
struct btnode;
class binarytree
//建構函式,將根節點置空
~binarytree();//銷毀二叉樹
void createbtree()
}//層次遍歷二叉樹
/* ** 演算法概述
層次遍歷二叉樹,關鍵要用到佇列,
父結點一出,就要判斷子結點是否為空,非空則馬上進入佇列
*/void binarytree::displaylevelbtree()
coutpretrabtree(ptnode->left_child);
pretrabtree(ptnode->right_child); }}
//遞迴演算法:中序遍歷
void binarytree::intrabtree(btnode* ptnode)
}//遞迴演算法:後序遍歷
void binarytree::posttrabtree(btnode* ptnode)
}//非遞迴演算法:先序遍歷
/* ** 演算法概述
對於任一節點p,
1)輸出節點p,然後將其入棧,再看p的左孩子是否為空;
2)若p的左孩子不為空,則置p的左孩子為當前節點,重複1)的操作;
3)若p的左孩子為空,則將棧頂節點出棧,但不輸出,
並將出棧節點的右孩子置為當前節點,看其是否為空;
4)若不為空,則迴圈至1)操作;
5)如果為空,則繼續出棧,但不輸出,
同時將出棧節點的右孩子置為當前節點,
看其是否為空,重複4)和5)操作;
6)直到當前節點p為null並且棧空,遍歷結束。
*/void binarytree::pretrabtree_n()
} coutbtnode* p_cur = bt;
while(p_cur || !bt_stack.empty())
else
}} coutb_tree->displaylevelbtree();
b_tree->pretrabtree();
b_tree->intrabtree();
b_tree->posttrabtree();
b_tree->pretrabtree_n();
b_tree->intrabtree_n();
return 0;
}
顯然,對乙個含有n個節點的二叉樹進行遍歷,其時間複雜度為o(n),所需輔助空間為遍歷過程中棧的最大容量,即樹的深度,最壞情況為n,因此其空間複雜的也為o(n)。 二叉樹的遍歷 二叉樹遍歷與儲存
在資料結構中,二叉樹是非常重要的結構。例如 資料庫中經常用到b 樹結構。那麼資料庫是如何去單個查詢或者範圍查詢?首先得理解二叉樹的幾種遍歷順序 先序 中序 後序 層次遍歷。先序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 按層級 class node if c...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
玩轉二叉樹(二叉樹的遍歷)
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 ...