赞
踩
假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树高度。
辅助队 q(存储节点);1对位标记参数L(用来记录当前一层队尾所在位置);指针P(用来指向出队元素);记录高度参数 dept(记录当前高度);
#include <iostream> using namespace std; typedef struct TreeNode{ char data; struct TreeNode *lchrld,*rchild; int tag; }TreeNode,*Tree; //构建树 void creatTree(Tree &t){ char ch; ch = getchar(); if(ch=='#') t=NULL; else{ t = (TreeNode *)malloc(sizeof(TreeNode)); t->data = ch; t->tag=0; t->lchrld=NULL; t->rchild = NULL; creatTree(t->lchrld); creatTree(t->rchild); } } int dept(Tree t){ if(!t) return 0; TreeNode *q[10]; int f=-1,r=-1; int ans=0,L=0; TreeNode *p; q[++r] = t; while (f<r) { p=q[++f]; if (p->lchrld) q[++r] = p->lchrld; if(p->rchild) q[++r] = p->rchild; if(L==f){ ans++; L=r; } } return ans; } int main(){ Tree t; creatTree(t); cout<<dept(t); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。