樹的非遞迴遍歷

2022-08-02 17:36:08 字數 873 閱讀 1490

reference:浙大資料結構慕課

1、非遞迴中序遍歷

1)定義乙個棧。

2)一直向左節點訪問,將訪問到的節點入棧,直到節點為空。

3)棧頂pop出乙個節點,指標指向其右節點,重複上述過程。

code:

1

bool 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:

1

bool 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...