演算法 C 實現二叉樹遍歷(遞迴 非遞迴)

2021-08-03 08:38:28 字數 1534 閱讀 4794

完成二叉樹建立,然後分別採用前序中序後序三種方式輸出結果。

#include

#include

#include

//節點結構體

struct node

};//構建二叉樹

void inertnode(node *node,int value)

else

}else

else

}}//前序遍歷遞迴實現

void preorder(node *node)

}//前序遍歷非遞迴實現

void preorder1(node *node)

std::stack

nstack;

nstack.push(node);

while(!nstack.empty())

if(temp->left)

}}//中序遍歷遞迴實現

void inorder(node *node)

}//中序遍歷非遞迴實現

void inorder1(node *node)

else

}}//後序遍歷遞迴實現

void posorder(node *node)

}//後序遍歷非遞迴實現

void posorder1(node *node)

while(!nstack2.empty())

}//廣度優先遍歷

void broadorder(node *node)

std::queue

qnodes;

qnodes.push(node);

while(!qnodes.empty())

if(temp->right)

}}int main()

std::cout

<<"preorder is:";

preorder(&root);

std::cout

<<"inorder is:";

inorder(&root);

std::cout

<<"posorder is:";

posorder(&root);

std::cout

<<"preorder without recursion is:";

preorder1(&root);

std::cout

<<"inorder without recursion is:";

inorder1(&root);

std::cout

<<"posorder without recursion is:";

posorder1(&root);

std::cout

<<"broadorder is:";

broadorder(&root);

}}

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

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

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷c 實現

三種遍歷演算法均採用棧來實現 1.前序遍歷 先訪問根節點,再訪問左子樹,最後訪問右子樹 先將根節點進棧,棧不空時迴圈 2.中序遍歷演算法 左中右 從根節點開始,將所有左節點一一進棧,當無左節點時表示棧頂節點無左子樹,然後出棧這個節點,並訪問它,將tmp指向剛出棧節點的右孩子節點,對右子樹進行同樣的處...