二叉树插入操作

/*
功能:将一个节点插入到二叉树中节点的子节点中
输入: p,c ,RL
    p:节点将插入到p所指向的节点的子节点中
    c:指向待插入的节点
    RL:为0表示插入到左子树,为1表示插入到右子树
输出:bool
*/
template<typename T>
bool BinaryTree<T>::InsertChild(BTNode<T> *p,BTNode<T> *c,int RL)
{
    if(p)
    {
        if(RL==0) //插入到p的左节点
        {
            c->rchild=p->lchild;//p节点原有的左子树成为c的右子树
            p->lchild=c;//c成为p的左子树
        }
        else
        {
            c->rchild=p->rchild;
            p->rchild=c;
        }
        return true;
    }
    else
        return false;
}

如下有一个二叉树和一个节点,其中p指向节点2,c指向节点6。现在需要将c插入到p的左子树中。

RL为0,c的右子结点指针(本来指向NULL)指向 p的左子节点(4)

将指向p左子节点的指针 指向c所指向的节点(6)

插入子节点完成

另一种实现形式:

template<typename T>
bool BinaryTree<T>::InsertChild(T e,T c,int RL)
{
    BTNode<T> *pe,*pc;
    pe=SearchNode(e);
    if(pe)
    {
        pc=new BTNode<T>;
        pc->data=c;
        pc->lchild=NULL;
        pc->rchild=NULL;
        if(RL==0)
        {
            pc->rchild=pe->lchild;
            pe->lchild=pc;
        }
        else
        {
            pc->rchild=pe->rchild;
            pe->rchild=pc;
        }
        return true;
    }
    cout<<"结点"<<e<<"不存在"<<endl;
    return false;
}

二叉树插入操作

时间: 2024-08-14 09:29:00

二叉树插入操作的相关文章

AVL树的初步生成与插入操作

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.构造与调整方法 平衡二叉树的常用算法有红黑树.AVL.Treap等. 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量. AVL是最先发明的

红黑树,TreeMap,插入操作

红黑树 红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡.对于一棵有效的红黑树二叉树而言我们必须增加如下规则: 1.每个节点都只能是红色或者黑色 2.根节点是黑色 3.每个叶节点(NIL节点,空节点)是黑色的. 4.如果一个结点是红的,则它两个子节点都是黑的.也就是说在一条路径上不能出现相邻的两个红色结点. 5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点. 这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点. ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数 二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现. ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结点,计数增1.因此,可使用类似于先序遍历的思路来实现,代码如下: //计算树中节点个数 private int nubmer

数据结构&amp;&amp;AVL树原理、插入操作详解及实现

1.基本概念 AVL树的复杂程度真是比二叉搜索树高了整整一个数量级--它的原理并不难弄懂,但要把它用代码实现出来还真的有点费脑筋.下面我们来看看: 2.AVL树是什么? AVL树本质上还是一棵二叉搜索树(因此读者可以看到我后面的代码是继承自二叉搜索树的),它的特点是: 1. 本身首先是一棵二叉搜索树. 2. 带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1. 例如: 5              5 / \            / \ 2   6          2  

搜索二叉树的操作

搜索二叉树的数据结构定义: /*二叉搜索树的结构定义*/ typedef struct TreeNode* SearchTree; typedef struct TreeNode* Position; struct TreeNode { int Element; SearchTree Left; SearchTree Right; } 搜索二叉树的插入操作: SearchTree Insert(int x, SearchTree T) { if(T == NULL)//空树 { T = mall

平衡二叉树插入操作的详细过程图解

二叉搜索树/二叉排序树/二叉查找树 是二叉树.任意结点的左子树的值均小于根节点的值,右子树均大于根节点的值 没有键值相等 平衡二叉树(AVL树) 定义 左右字数的高度差的绝对值不超过1,并且两子树都是平衡二叉树 没有键值相等 高度差,又名平衡因子,范围为[-1,0,1],在此规定==平衡因子 bf = 右子树的高度-左子树的高度== 插入操作 当有新的结点插入之前,该树一定是一个平衡二叉树 按照普通搜索树的方式插入结点cur 插入之后,调整cur的 parent.bf:插入到左边 bf --:插

Phone List(简单的字典树插入操作)

Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11655    Accepted Submission(s): 3970 Problem Description Given a list of phone numbers, determine if it is consistent in the sense th

关于有默认值的字段在用EF做插入操作时的思考

今天在用EF做插入操作的时候发现数据库中一个datetime类型的字段(CreateDate)的值居然全部为null.于是赶紧看表结构发现CreateDate字段居然是允许为空的. 虽然为空,但是设置了默认值getdate(),按说不应该为null的.于是开始测试. 字段允许Null值的情况 Users表结构如下: 假如一个字段有了默认值,并且又允许为Null,在做插入操作时会发生什么? 如上图中的表结构,CreateDate是允许为null的,而又有默认值getdate().这样在用传统SQL

Geeks Splay Tree Insert 树的插入操作

Splay树的插入操作,只需要处理好插入节点的孩子节点就可以了,最重要的是不要破坏了BST的基本规则. 因为高度并不是Splay树的首要因素,所以插入的时候也是使用splay操作,然后在根节点插入. 参考:http://www.geeksforgeeks.org/splay-tree-set-2-insert-delete/ 对比一下使用插入创建的树和手工创建数的区别,先序遍历的结果: #pragma once #include<stdio.h> #include <stdlib.h&g