二叉樹的非遞迴遍歷c 實現(與遞迴進行了對比)

2022-08-17 07:15:16 字數 1871 閱讀 4699

條件:需要將原來樹的節點重新封裝,封裝後的結構中具有對原來樹節點的乙個flag描述;

利用stl中的棧容器實現對節點的入棧以及出棧操作;

拿下圖為例:

注意:該段**實現的是前序遍歷,如果想要實現中序/後序遍歷 只需將第48-49行**與前倆行**調換位置即可。該段**沒有對new過的節點進行delete。(暫時不知道怎麼delete   !-!)。

1 #include2 #include3

using

namespace

std;45

const

int my_false = 0; //

6const

int my_true = 1;7

8//二叉樹原始節點

9struct

binarynode10;

15//

封裝了flag的節點

16struct

bitreestacknode17;

21//

建立封裝後棧中的節點

22 bitreestacknode* createbitreestacknode(binarynode* node, int

flag)

28//

非遞迴遍歷

29void nonrecursion(binarynode*root) 51}

52}53//

遞迴遍歷

54void recursion(binarynode*root)

61//

初始化二叉樹

62void

createbinarytree() ;

64 binarynode node2 = ;

65 binarynode node3 = ;

66 binarynode node4 = ;

67 binarynode node5 = ;

68 binarynode node6 = ;

69 binarynode node7 = ;

70 binarynode node8 = ;

71//

建立節點關係

72 node1.lchild = &node2;

73 node1.rchild = &node6;

74 node2.rchild = &node3;

75 node3.lchild = &node4;

76 node3.rchild = &node5;

77 node6.rchild = &node7;

78 node7.lchild = &node8;

79//

二叉樹的非遞迴列印

80 cout << "

二叉非樹遞迴遍歷:\n";

81 nonrecursion(&node1);

82 cout << endl<

二叉樹遞迴遍歷:\n";

83 recursion(&node1);84}

8586

intmain()

先序:

中序:

後序:

二叉樹遍歷遞迴與非遞迴實現

二叉樹遍歷 先序遍歷 void preorder treenode r,char pattern printf pattern,r value preorder r lchild,pattern preorder r rchild,pattern 先序遍歷非遞迴實現 void preorder no...

二叉樹遍歷 遞迴 非遞迴實現

先序遍歷中序遍歷 後序遍歷 根結點 左子樹 右子樹 左子樹 根子樹 右子樹 左子樹 右子樹 根結點 先序遍歷 void preorder btree t 中序遍歷 void inorder btree t 後序遍歷 void postorder btree t 遞迴 recursion 就是子程式 ...

二叉樹的遞迴遍歷與非遞迴遍歷

二叉樹的遞迴遍歷與非遞迴遍歷 include include include 本程式實現二叉樹的建立,遞迴遍歷與非遞迴遍歷 typedef struct tnode tnode,pnode 構造二叉樹 pnode createtree else pnode data data pnode lchil...