首页 > 代码库 > 【数据结构】二叉树遍历
【数据结构】二叉树遍历
先序遍历和中序遍历非递归代码:
#include <iostream> #include <vector> using namespace std; typedef struct BinaryTree { int data; struct BinaryTree *rchild, *lchild; }BinaryTree; int createBinaryTree( BinaryTree * &T) //必须用引用 因为内存是在函数里面分配的 { int ch; scanf("%d", &ch); if(ch != 0) { T = (BinaryTree *)malloc(sizeof(BinaryTree)); T->data =http://www.mamicode.com/ ch; createBinaryTree(T->lchild); createBinaryTree(T->rchild); } else { T = NULL; } return 0; } int visit(int data) { printf("%d ", data); return 0; } int PreOrderTraverse(BinaryTree T) //先序遍历 { BinaryTree* p; vector<BinaryTree *> Stack; Stack.push_back(&T); while(!Stack.empty()) { while((p = Stack.back()) != NULL) { visit(p->data); Stack.push_back(p->lchild); } Stack.pop_back(); if(!Stack.empty()) { p = Stack.back(); Stack.pop_back(); Stack.push_back(p->rchild); } } return 0; } int InOrderTraverse(BinaryTree T) //中序遍历 { BinaryTree* p; vector<BinaryTree *> Stack; Stack.push_back(&T); while(!Stack.empty()) { while((p = Stack.back()) != NULL) Stack.push_back(p->lchild); Stack.pop_back(); if(!Stack.empty()) { p = Stack.back(); Stack.pop_back(); visit(p->data); Stack.push_back(p->rchild); } } return 0; } int main() { BinaryTree * T = NULL; createBinaryTree(T); PreOrderTraverse(*T); InOrderTraverse(*T); return 0; }
注意理清楚弹栈的机制。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。