二叉树笔记

来源:互联网 发布:telnet23端口连接失败 编辑:程序博客网 时间:2024/05/18 09:14

二叉树的递归思想,值得好好琢磨一番。

/*

数的直观表达图:1.倒悬树;2.嵌套集合;3.广义表;
二叉树的编号规则:从上到下,由左到右
满二叉树(结点的度是0或者2)是完全二叉树的特殊情况。


二叉树可以用数组来表示,不足的地方用空代替,但用的少
二叉树的三叉链表结点也用得少,一个结点:Lchild data parent Rchild,其中parent指针向上指
二叉树链表结点: Lchild data Rchild,最底下的结点的左右都是NULL
二叉搜索树,又名二叉排序树(递归插入)
*/
#include <iostream>

typedef int DataType;

struct Node
{
 DataType data;
 Node *left;//指向左孩子(左子树)结点
 Node *right;//指向右孩子结点
}


Node* createNode(DataType x);//创建一个结点
void insert(Node **root,Node *pn);//插入一个结点()
void preTrave(Node *root);//先(根)序遍历,默认从左到右,LDR
void midTrave(Node *root);//中序遍历
void postTrave(Node *root);//后序遍历


Node* createNode(DataType x)
{
 Node *p=(Node *)malloc(sizeof(Node));
 p->data=x;
 p->left=p->right=NULL;
 return p;
}


void insert(Node **root,Node *pn)
{
  if(pn==NULL)
    return;
  if(*root=NULL){
   *root=pn;
   return;
  if((*root->data)<pn->data){
   insert(&((*root)->right),pn);
  else
   insert(&(*root)->left),pn);
 }
}


void preTrave(Node *root)
{
 if(root=NULL)
   return;
 else
   printf("%d\t",root->data);
 preTrave(root->right);
 preTrave(root->left);
}


void midTrave(Node *root)
{
 if(root=NULL)
  return;
 else
  midTrave(root->left);
 printf("%d".root->data);
 midTrave(root->right);
}
0 0
原创粉丝点击