给个思路:
找最大值的关键是树的遍历,而递归的遍历方式,就是利用函数调用,参数的入栈出栈,来达到回溯的目的,同理,不用递归调用,我们也可以采用这个思想
创建一个栈式的数据结构
将根节点指针压入栈中,访问其值,假如我们采用广度优先的遍历方式,就遍历其子节点
在访问子节点的同时,依次将访问过的节点指针压入栈中,而最上面的节点就是最后访问的节点
如最上面的节点是叶子节点,则弹栈,否则继续遍历其子节点,并如3步所说,依访问顺序压栈
对于所有子节点都已遍历(压栈)的父节点,做标记,则当弹栈后,栈的最上面是一个带有标记的非叶子节点,亦将其弹出栈
循环3-5步,直到栈空为止
深度优先搜索,也可以用类似的方式实现
追问能写个程序吗?
追答步骤很清楚了,有问题可以讨论,程序就算了
编写非递归算法,求二叉树中叶子结点的个数
typedef struct _btree { int v;struct _btree* l;struct _btree* r;} *node;\/\/ . . . .int count_nodes(node root){ node a[100];node* p = a;node t;int n = 0;p++ = root;while(p != a) { t = *--p;++n;if(t->l) *p++ = t->l;if(t->r) *p++ = t-...
跪求!!10分奉上!统计二叉树结点个数的算法 非递归
1、将根结点插入队列。2、判断队列是否为空,非空执行第三步,否则执行第四步退出循环。3、从队列中取出一个结点,同时将取出结点的儿子结点插入队列。此外,将计数器加1,再转到第二步。4、结束循环。注意:队列是先进先出的结构,与栈相反。如果你根据以上仍然不能写出完整的程序,下面的程序可作为...
如何用非递归算法求二叉树的高度
last=rear;//last指向下层节点} }
关于数据结构的问题,用C语言描述
设f(x,y)最小值fmin,min为下标,最大值fmax,max为下标,f(x,y)到g(x,y)的线性变化公式为 g(x,y)=|((f(x,y)-fmin)\/(fmax-fmin))*255|,做不完不要紧,会做一点就行,看情况另加分 展开 我来答 2个回答 #热议# 你发朋友圈会使用部分人可见功能吗? 甫访波R0 2011-06-25 · TA获得...
二叉树先序非递归遍历C语言算法
printf("先序非递归建立一个二叉树:"); if((ht=createprebitree())!=NULL) \/\/非递归建立 \/\/CreateBiTree(&ht); \/\/if(ht!=NULL) \/\/递归建立 { printf("先序遍历输出二叉树:"); preordertraverse(ht); putchar('\\n'); printf("中序遍历输出二叉树:"); inordertraverse(ht); putchar('\\n')...
假设二叉树采用二叉链表作为存储结构,试编写一个算法:求任意一个指定结...
非递归中序遍历 构造变量count记录当前层访问到的节点数,nextcount记录当前层的总个数;每当访问过一层层数depth++;此种方法同时可以求最大宽度,访问第几层的第几个节点,求带权路径长度WPL,是一种通用方法!int TreeDepth(TreeNode* pRoot){queueq;q.push(pRoot);if(pRoot==NULL)return 0;...
二叉树的生成.输入一个二叉树的中根遍历序列和后根遍历序列,用非递归...
中序遍历这可二叉树 先看根节点 1 \/ \\ 左子树 右子树 我们应该先遍历左子树 也就是下面这棵树 2 \/ \\ 4 5 对于这棵树在进行中序遍历 我们应先遍历她的左子树 他只有一个根节点4,左右子树都为空 哪么遍历这个只有一个根节点的二叉树 先访问她的左子树,为空 返回...
数据结构,怎么利用非递归后序遍历找到x节点的所有祖先,以我的智商...
当在二叉树中后序遍历到访问某结点时 ,从栈顶到栈底正好是该结点从双亲开始直到根的所有结点(当然也就是该结点的所有祖先),因此这段程序就是非递归到该结点时,从栈底到栈顶输出栈中所有元素,也就是该结点的所有祖先
...树采用链接存储方式存储,编写一个二叉树后序遍历的非递归算法...
假设二叉树采用链接方式存储,编写一个对二叉树进行中序遍历的递归和非递归后序遍历: var root,i,t,tl,tr,n:byte; depth,l,r:array[1..100]
二叉树的深度算法怎么算啊
二叉树的深度算法:一、递归实现基本思想:为了求得树的深度,可以先求左右子树的深度,取二者较大者加1即是树的深度,递归返回的条件是若节点为空,返回0 算法:1 int FindTreeDeep(BinTree BT){ 2 int deep=0;3 if(BT){ 4 int lchilddeep=FindTreeDeep(BT->lchild);5 int rchilddeep=Find...