用遞迴方法實現二叉樹的先序遍歷、中序遍歷和後序遍歷很簡單:
class solution
void preorder(treenode *root)
};
class solution
void inorder(treenode *root)
};
class solution
void postorder(treenode *root)
};
非遞迴方法,利用棧實現。
class solution
void preorder(treenode *root)
if(!s.empty())}}
};
class solution
void inorder(treenode *root)
if(!s.empty())
}}
後序遍歷的非遞迴實現是三種遍歷的非遞迴實現中最難的一種,因為後序遍歷要求左右孩子都已被訪問並且先訪問左孩子再訪問右孩子,然後才能訪問根節點,這就為流程的控制帶來了困難。
要保證根結點在左孩子和右孩子訪問之後才能訪問,因此對於任一結點p,先將其入棧。如果p不存在左孩子和右孩子,則可以直接訪問它;或者p存在左孩子或者右孩子,但是其左孩子和右孩子都已被訪問過了,則同樣可以直接訪問該結點。若非上述兩種情況,則將p的右
孩子和左孩子依次入棧,這樣就保證了每次取棧頂元素的時候,
左孩子在右孩子前面被訪問,左孩子和右孩子都在根結點前面被訪問。
class solution
void postorder(treenode *root)
else}}
};
二叉樹非遞迴先序遍歷
二叉樹的遞迴先序遍歷很簡單,假設二叉樹的結點定義如下 1 struct binarytreenode 2 遞迴先序遵循 根 左 右的順序 1 void preorder binarytreenode root 2非遞迴我們以乙個例子說明,仍然以之前博文的乙個二叉樹說明 1 82 36 104 55 ...
非遞迴先序遍歷二叉樹 2
非遞迴先序遍歷二叉樹 include define maxsize 100 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 順序棧型別定義 typedef struct seqstk 初始化棧 int ini...
二叉樹的非遞迴先序,中序遍歷
題目描述 從鍵盤接收擴充套件先序序列,以二叉鍊錶作為儲存結構,建立二叉樹。採取非遞迴方法輸出這棵二叉樹的先序 中序遍歷序列。樣例輸入 abc de g f 樣例輸出 abcdegf cbegdfa 實現 include include define max 100 typedef struct no...