二叉樹的前序遍歷 中序遍歷和後序遍歷

2021-09-18 03:11:41 字數 1147 閱讀 3017

#include#includeusing namespace std;

typedef struct bitnodebitnode,*bitree;

void initbitree(bitree &t)//構造空二叉樹

void createbitree(bitree &t)//生成二叉樹

}

void preorder(bitree t)//先序遞迴遍歷

}

a)訪問之,並把結點node入棧。當前結點置為左孩子;

b)推斷結點node是否為空,若為空。則取出棧頂結點並出棧,將右孩子置為當前結點;否則反覆a)步直到當前結點為空或者棧為空(能夠發現棧中的結點就是為了訪問右孩子才儲存的)

void sqlpreorder(bitree t)//先序非遞迴遍歷

else

}}

void inorder(bitree t)//中序遞迴遍歷

}

void sqinorder(bitree t)//中序非遞迴遍歷

else

}

void postorder(bitree t)//後序遞迴遍歷

}

//後序非遞迴遍歷1思路:因為後序非遞迴遍歷二叉樹的順序是先訪問左子樹,再訪問後子樹,最後

//訪問根結點。當用堆疊來儲存結點,必須分清返回根結點時,是從左子樹返回的,還是從右子樹

//返回的。所以,使用輔助指標r,其指向最近訪問過的結點。

void sqlpostorder1(bitree t)//後序非遞迴遍歷1

else //向右

else //否則,訪問棧頂結點並彈出}}

}//思路2:在結點中增加標誌域,記錄是否已被訪問。

void sqlpostorder2(bitree t)//後序非遞迴遍歷2

else

else //訪問棧頂元素並彈棧}}

}

二叉樹的前序遍歷 中序遍歷 後序遍歷

二叉樹分為根節點 左子節點 右子節點,如下圖所示,前序遍歷的順序是 根左右 即 abc,中序遍歷的順序是 左根右 即 bac,後續遍歷的順序是 左右根 即 bca,給定乙個二叉樹,求三種遍歷方式的結果,以下圖為例 前序遍歷 根左右 a b d e f g c h k 中序遍歷 左根右 d b f e...

二叉樹的前序遍歷 中序遍歷 後序遍歷

樹的遍歷一般是從左至右,按照根結點在前中後的順序分為了前序遍歷,中序遍歷和後序遍歷 前序遍歷 根結點 左節點 右節點 中序遍歷 左節點 根結點 右節點 後序遍歷 左節點 右節點 根節點 下面寫了乙個遍歷的demo public class binarytree node current root n...

二叉樹的遍歷 前序遍歷 中序遍歷 後序遍歷

二叉樹的遍歷分為前序遍歷 中序遍歷 後序遍歷 前序遍歷是指,對於樹中的任意節點來說,先列印這個節點,然後再列印它的左子樹,最後列印它的右子樹。中序遍歷是指,對於樹中的任意節點來說,先列印它的左子樹,然後再列印它本身,最後列印它的右子樹。後序遍歷是指,對於樹中的任意節點來說,先列印它的左子樹,然後再列...