reference:浙大資料結構慕課
1、非遞迴中序遍歷
1)定義乙個棧。
2)一直向左節點訪問,將訪問到的節點入棧,直到節點為空。
3)棧頂pop出乙個節點,指標指向其右節點,重複上述過程。
code:
1bool inorder(treenode *root)
9 root =s.top();
10s.pop();
11 cout << root->val; //
中序12 root = root->right;13}
14return
valid;
15 }
注意迴圈結束的判斷條件不能只是 !s.empty(),因為當pop出根節點後,root指向根節點的右節點,此時棧為空。
也不能只是root,因為當pop出某節點,且此節點無右節點時,root為空。
2、前序遍歷
只需把訪問節點的位置改一下,其餘和中序遍歷相同:
code:
1bool isvalidbst(treenode *root)
10 root =s.top();
11s.pop();
12 root = root->right;13}
14return
valid;
15 }
3、後序遍歷
未完待續。。。
樹的遍歷遞迴非遞迴
1先序 遞迴 class solution public void b list list,treenode tree 非遞迴 class solution else return list 2中序 遞迴 class solution public void b list list,treenode...
樹的非遞迴遍歷
在vs2011版本中除錯通過。include stdafx.h include stack.h include 標準庫中定義的棧 includeusing namespace std define max len 15 void create tree treenode head,char pdat...
樹的非遞迴遍歷
1.中根遍歷 思路 一直遍歷左子樹 p p left 直到p為空。此時訪問棧頂元素,棧頂元素出棧。開始遍歷右子樹p p right 遍歷右子樹的左子樹 出棧時訪問 1.definition for a binary tree node.2.struct treenode 7.class soluti...