树的实现与应用:1.给定一棵用链表表示的二叉树,其根指针为root,试写出求二叉树结点数目。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树的实现与应用:1.给定一棵用链表表示的二叉树,其根指针为root,试写出求二叉树结点数目。相关的知识,希望对你有一定的参考价值。
参考技术A //非递归中序遍历算法#include <iostream>
#include <conio.h>
#include <stack>
using namespace std;
typedef struct BiTNode
char data;
BiTNode *lchild,*rchild; //左右孩子指针
BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树
//构造二叉链表表示的二叉树T
char ch;
cout<<"请输入数据:"<<"\t";
cin>>ch;
if(ch=='0')
T=NULL;
else
T=(BiTNode * )malloc(sizeof(BiTNode));
T->data=ch; //生成根结点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
//CreateBiTree
void InOrderTraverse(BiTree &T)
//采用非递归算法输出二叉树中的值
stack<BiTNode *> s;
BiTree p=T;
while(p||!s.empty())
if(p)
s.push(p);
p=p->lchild;
//根指针进栈,遍历左子树
else
//根指针退栈,访问根结点,遍历右子树
p=s.top();
cout<<p->data<<" ";
s.pop();
p=p->rchild;
//else
//while
//InOrderTraverse
void main()
BiTree Root;
cout<<" '0' 作为空树"<<endl;
Root=(BiTNode *)malloc(sizeof(BiTNode));
CreateBiTree(Root);
cout<<"中序输出二叉树:"<<endl;
InOrderTraverse(Root);
cout<<endl;
getch();
基于二叉链表的二叉树的嵌套括号表示
#include <iostream> using namespace std; //二叉树的数据结构定义 typedef struct node{ char data; struct node *lchild,*rchild; }BTNode,*BTREE; void create(BTREE &T); void match(BTREE T); int main(int argc, const char * argv[]) { BTREE T; create(T); match(T); cout<<endl; return 0; } //先序遍历创建二叉树,输入0代表结点为空 void create(BTREE &T){ char ch; cout <<"请输入"<<endl; cin>>ch; cout<<endl; if(ch==\'0\') T==NULL; else{ T = new BTNode(); //T = (BTREE)malloc(sizeof(BTNode)); T->data = ch; create(T->lchild); create(T->rchild); } } //匹配规则 void match(BTREE T){ if(T) { cout<<T->data; if(T->lchild&&T->rchild) { cout<<"("; match(T->lchild); cout<<","; match(T->rchild); cout<<")"; } else if(T->lchild&&T->rchild==NULL) { cout<<"("; match(T->lchild); cout<<","; cout<<")"; } else if(T->lchild==NULL&&T->rchild) { cout<<"("; cout<<","; match(T->rchild); cout<<")"; } } }
以上是关于树的实现与应用:1.给定一棵用链表表示的二叉树,其根指针为root,试写出求二叉树结点数目。的主要内容,如果未能解决你的问题,请参考以下文章
建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历,统计并输出结点个数。