二叉树与二叉排序树的创建

创建二叉树

#include <iostream>
using namespace std;

struct TreeNode
{
    int val;
    TreeNode *left,*right;
};

/*void preOrderTraverse(TreeNode *p)
{
    if(p)
    {
        cout<<p->val<<" ";
        preOrderTraverse(p->left);
        preOrderTraverse(p->right);
    }
}*/

void create(TreeNode *&p)
{
    int k;
    cin>>k;
    if(k!=0)
    {
        p=new TreeNode;
        p->val=k;
        create(p->left);
        create(p->right);
    }
    else
        p=NULL;
}

int main()
{
    TreeNode *root=NULL;
    create(root);

    //preOrderTraverse(root);
}

创建二叉排序树

#include <iostream>
using namespace std;

struct TreeNode
{
    int val;
    TreeNode *left,*right;
};
void Insertnode(TreeNode *&p,int k)
{
    if(p==NULL)
    {
        p=new TreeNode;
        p->val=k;
        p->left=p->right=NULL;
        return;
    }
    /*if(k==p->val)  BST中不能有相等的值
        return;*/
    if(k<p->val)
        Insertnode(p->left,k);
    else
        Insertnode(p->right,k);
}

/*void CreateTree(TreeNode *root,int a[],int n)
{
    root=NULL;
    int i;
    for(i=0;i<n;i++)
    {
        Insertnode(root,a[i]);
    }
}*/

void preOrderTraverse(TreeNode *p)
{
    if(p)
    {
        cout<<p->val<<" ";
        preOrderTraverse(p->left);
        preOrderTraverse(p->right);
    }
}

int main()
{
    int a[]={5,7,1,3,9,2,0,4,8,6};
    int i,n=10;
    TreeNode *root=NULL;
    for(i=0;i<n;i++)
        Insertnode(root,a[i]);

    preOrderTraverse(root);
    cout<<endl;

    return 0;
}
时间: 2024-10-25 16:07:49

二叉树与二叉排序树的创建的相关文章

二叉查找树(二叉排序树)创建,插入,删除操作。

二叉排序树 二叉排序树是一个基础的树的数据结构.应用非常多. 它的特性就是,左孩子小于parent,右孩子大于parent. 寻找节点 寻找节点就是直接根据数值的大小,从root节点开始遍历,大于当前遍历节点就向它的右子树查找,相反则查找它的左子树.然后返回. 查找最大最小节点 直接根据root节点,遍历到最右就是最大节点,遍历到最左,就是最小节点. 插入节点 插入节点我这里插入的节点都会成为叶子节点.根据大小的关系向下遍历,遍历到最后的节点,然后插入就可以了. 删除节点 这里删除节点是相对麻烦

二叉排序树的创建,遍历和删除

Binary Sort/Search Tree 为什么会有它 数组 未排序:直接在队尾添加,速度快:查找速度慢. 排序:二分查找,查找速度快:添加新数据,需要找到插入位置移动后面的数组,速度慢 链表 添加快,查找慢: 简介 BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大. 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如针对前面的数据 (7,3, 10, 12,

二叉树的广义表创建及中序遍历、后序遍历、层次遍历的非递归算法(C语言)

广义表创建二叉树关于用广义表的形式表示二叉树的形式如下 ①广义表中的一个字母代表一个结点的数据信息.②每个根结点作为由子树构成的表的名字放在义表的前面.③每个结点的左子树与右子树之间用逗号分开.若结点只有右子树面无左子树,则该逗号不能省略.④在整个广义表的末尾加一个特殊符号(如“@”)作为结束标志. 下面先用自然语言描述算法如下.依次从广义表中取得-个元素,并对取得的元素做如下相应的处理. ①若当前取得的元素为字母,则按如下规则建立一个新的(链)结点.a)若该结点为二叉树的根结点,则将该结点的地

二叉树排序树的创建

_declspec(dllexport)    Node::TNODE* create_binary_sort_tree(Node::RECORD TEST[], int maxlen);             //二叉排序树的创建 Node::TNODE* tree::create_binary_sort_tree(Node::RECORD TEST[], int maxlen)                   //二叉排序树的创建{    int i;    Node::TNODE *

创建二叉树( 二叉排序树(Binary Sort Tree))

#include<stdio.h> #include<stdlib.h> /* 递归前中后遍历 */ typedef struct node {   int data;   struct node*left;   struct node*right; }BTnode; BTnode*CreateTree(int a[],int n) {   BTnode*root,*c,*p,*pa;   int i;   root=(BTnode*)malloc(sizeof(BTnode));

二叉排序树的创建

二叉平衡树的创建 一些废话 最近在重温数据结构以应对即将到来的面试.发现很多当年学过的东西都忘掉了,就拿二叉平衡树来说,看到最后我才恍然大悟:哦,原来这东西我之前真的学过!而且貌似当时也写过测试的代码,只是没有保留下来.这次再整理一下,留在博客里以便查阅,同时也分享给大家,和大家交流一下. 再感慨一下,学过的东西,如果不经常复习时间长了真的跟没学过似的.大家应该都有这个感受吧,上次和耳关同学交流,她也有同感.所以应该学而时习之.不过话又说回来,如果不经常使用,谁会刻意去复习呢?总之还是多写代码吧

二叉树:树的创建和遍历

前面介绍的链表,栈,队列都是一种顺序容器,访问元素的时候都是通过位置来访问的.如果想要通过值的方式来获取数据,只能通过遍历的方式.这在时间上消耗比较大.而二叉树可以做到不用遍历就可以通过值的方式来获取数据.二叉树是按值来保存元素,也按值来访问元素. 二叉树的相关术语: 树的结点:包含一个数据元素及若干指向子树的分支: 孩子结点:结点的子树的根称为该结点的孩子: 双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲: 兄弟结点:同一双亲的孩子结点: 堂兄结点:同一层上结点: 祖先结点: 从

线索二叉树实例(前序创建,中序遍历)--2018.5.15

#include <stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef enum{Link, Thread} PointerTag; //link = 0表示指向左右孩子指针 //Thread = 1表示指向前驱或后继的线索 typedef struct BitNode { char data; //结点数据 struct BitNode *lchild; //左右孩子指针 struct BitNode

c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历

#include <iostream> #include <cstdio> #include <stdio.h> #include <string> #include <queue> #include <stack> using namespace std; class Node{ public : char data; struct Node *lchild,*rchild; }; class BiTree{ public: Nod