非递归遍历

二叉树的性质以及二叉树的遍历(非递归)(c语言)(一)

血红的双手。 提交于 2020-03-01 23:11:12
二叉树的性质: 性质 1 在二叉树的第i层上至多有2^(i-1)个结点(i>=1)。 性质 2 深度为k的二叉树至多有2^k-1个结点,(k>=1)。 性质 3 任何一颗二叉树,终端结点为n0,度为2的结点为n2,那么n0=n2+1。 性质 4 具有n个结点的完全二叉树的深度为└㏒2 n┘+1。 性质 5 完全二叉树按层次从上到下从左到右依次编号。编号为n的节点的左孩子为2n。 二叉树的储存结构 : lchild data rchild /*---------二叉树的二叉链表储存表示----------*/ typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild; }BiTNode ,*BiTree; 非递归遍历需要栈:栈的实现过程: 栈的线性储存结构与链式储存结构的实现(C语言) 。 栈部分的内容: typedef BiTree pElemType; typedef struct Snode //栈的储存结构 { pElemType data; //数据域 struct Snode *next; //指针域 }Snode,*LinkStack; void Init_StackL(LinkStack *S) //初始化院栈 { *S=NULL; } Status Push_L(LinkStack

二叉树的递归,非递归遍历,深度优先遍历,广度优先遍历

馋奶兔 提交于 2020-03-01 03:57:10
/** * 二叉树的定义和遍历 */ public class BinaryTree { /** * 打印节点的信息 */ public void printNode(TreeNode<String> node){ System.out.print(node.getData()+" "); } /** * 递归先序遍历二叉树 */ public void preIterator(TreeNode<String> node){ this.printNode(node); if (node.getLefNode() != null) { this.preIterator(node.getLefNode()); } if (node.getRigNode() != null) { this.preIterator(node.getRigNode()); } } /** * 递归中序遍历二叉树 */ public void midIterator(TreeNode<String> node){ if (node.getLefNode() != null) { midIterator(node.getLefNode()); } this.printNode(node); if (node.getRigNode() != null) { midIterator(node.getRigNode(