二叉树是每个节点最多有两个子树的树结构,遍历方法有深度优先(包括:先序、中序、后序遍历)和宽度优先(层序遍历),层序遍历通过队列可以实现。
这里主要介绍深度优先遍历的方法以及其中栈的应用,帮助理解二叉树的结构、递归和非递归中栈的应用。
前序遍历:根结点 ---> 左子树 ---> 右子树
中序遍历:左子树---> 根结点 ---> 右子树
后序遍历:左子树 ---> 右子树 ---> 根结点
根据三种遍历的特性,递归的算法很容易就能写出来
//先序 void PreOrder(node *root) { if (root==NULL) return; else { printf("%d", root->data); PreOrder(root->lch); PreOrder(root->rch); } } //中序 void InOrder(node *root) { if (root==NULL) return; else { InOrder(root->lch); printf("%d", root->data); InOrder(root->rch); } } //后序 void PostOrder(node *root) { if (root==NULL) return; else { PostOrder(root->lch); PostOrder(root->rch); printf("%d", root->data); } } int mian() { }
原文:https://www.cnblogs.com/wizarderror/p/10816635.html