求二叉树的结点个数(非递归)

编写一个算法,求二叉树的结点个数(非递归)
2024-12-30 02:59:23
推荐回答(2个)
回答1:

// bzl.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
typedef struct Bnode{
char data;
struct Bnode *lchild,*rchild;
}Bnode;
int i=0,n=0;
char *s="abc de g f ";
void preorder(Bnode *);
void visite(Bnode *);
void createTree(Bnode * &p){

if(s[i]!=' '){
p=new Bnode;
p->data=s[i];
i++;
createTree(p->lchild);
createTree(p->rchild);
}
else
{
p=NULL;i++;
}

}

void inorder(Bnode *T){
if(T!=NULL){
n++;
inorder(T->lchild);
inorder(T->rchild);
}

}

int _tmain(int argc, _TCHAR* argv[])
{
Bnode *p;
createTree(p);
inorder(p);
printf("二叉树中有:%d 个节点",n);
printf("\n");

return 0;
}

树类的问题都要递归啊,这是我以前写的程序,已运行过了

回答2:

可以用堆栈来实现
思想:一开始就树根放到堆栈里,然后用while循环遍历堆栈
步骤,出栈一个根,然后再用一个for循环遍历这个根的子节点,并全部入栈
嗯,嗯,嗯,就是这样