C/C++生成二叉树并搜索

直接上干货:

#include "targetver.h"
using namespace std;

//定义节点
struct BiNode
{
	int data;
	BiNode * lchild;
	BiNode * rchild;
};
//插入结点
BiNode * InsertBST(BiNode * root,int data)
{
if(root==NULL)
{
	root=new BiNode;
	root->data=data;
	root->lchild =root->rchild =NULL;
}
if(root->data >data)
	root->lchild = InsertBST(root->lchild ,data);
if(root->data <data)
	root->rchild = InsertBST(root->rchild ,data);
return root;
}
//创建二叉树
BiNode * CreateBST(BiNode * root,int data[],int n)
{
	int i;
	for(i=0;i<n;i++)
		root = InsertBST(root,data[i]);
	return root;
}
//先序搜索二叉树
void PrintBST(BiNode * root)
{
	if(root!=NULL)
	{
		cout<<root->data<<"->" ;
		PrintBST(root->lchild );
		PrintBST(root->rchild );
	}
}

int main(int argc, char* *argv)
{
	BiNode * root=NULL;
	int data[10]={5,9,4,7,3,6,1,8,2,10};
	root=CreateBST(root,data,10);
	PrintBST(root);
	cout<<endl;
	return 0;
}

结果(VS2010):

时间: 2024-12-20 08:21:29

C/C++生成二叉树并搜索的相关文章

二叉树 根据后序遍历生成二叉树

题目:给定一个二叉树的后序遍历数组arr[],生成二叉树 解题思路:根据搜索二叉树的性质,数组的最后一位arr[end]是二叉树的根,而且数组的左部分比arr[end]小,是根节点的左子数,数字的右部分比arr[end]大,是数组的右子数. Example: 树的形状如上图,后序遍历为:1 3 2 6  8 7 5 arr[end] = 5; 左部分(左子树):{1,3,2} 右部分(右子树):{6,8,7} package cn.edu.algorithm.prototype; /** * 根

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh

中缀表达式生成二叉树

中缀表达式生成二叉树,大概应该有递规,迭代,和编译原理中的自顶向下的预测分析法等. 递规,迭代的思路每次读出一个数字,一个运算符,比较当前运算符和之前符号的优先级,进行相关的操作. 自顶向下的预测分析法,做了下,实在忘记的差不多了,先占个位.以后完成. tree.c #include "head.h" struct Node * CreateNodesetV(int number,char opr,int type) { struct nodeData db; db.numberVal

二叉树 根据二叉树的前序数组和中序序遍历数组生成二叉树

题目:给定二叉树的前序遍历和中序遍历,生成二叉树. Example: 前序遍历数组:preArr[]:{1,2,4,5,3,6,7} 中序遍历数组:inArr[]:{4,2,5,1,6,3,7} 生成的二叉树如下图: 解题思路: 由二叉树的前序变量性质可知:preArr[0] 是数组的根节点,有根据二叉树的中序遍历的性质可知,{4,2,5}是二叉树的左子树,{6,3,7}在右子树上,重复执行该操作就构造出了二叉树 public class Solution { public TreeNode r

jS生成二叉树,二叉树的遍历,查找以及插入

js递归,二叉树的操作 //递归算法n次幂 function foo(n) { if (n == 1) { return 1; } else { return n * foo(n - 1); } } //console.log(foo(3));var nodes = { name: 'root', childs: [ { name: 'a1' }, { name: 'a2' }, { name: 'a3' }, { name: 'b1' }, { name: 'b2' }, { name: 'b

java生成二叉树和遍历

在java中实现二叉树和链表的方法都是在类中定义该类的对象引用 比如 class Tree { int data; Tree left; Tree right; } 这样的话当我们new一个Tree对象的时候,该对象就拥有了left和right两个对象,这样就起到了连接的 作用,在链表中就是连接了下一个,在树中就相当于边,这样就起到一个接一个的效果.总之,就是吧对象连接起来了. 下面是完整代码 package code; public class TwoTree { public static

迷宫生成及深度优先搜索遍历迷宫(OpenGL)

其实以前就写过一个迷宫的程序和DFS遍历,不过弄丢了,前几天闲就重写了一下.欢迎交流和拍砖.有很多不足的地方也希望大家多指正. 迷宫生成的算法来自<计算机图形学>,也就是这本书: 生成迷宫的算法描述如下: 由于表示墙使用了up_wall和left_wall两个矩阵,所以格子的数量要比能显示出来的多一行一列,否则屏幕最下边和最右边是没有墙的.虽然可以后面画上,不过我选择这样. 对于迷宫的遍历使用DFS,另外由于使用了一个visited矩阵表示每个格子是否已经访问过,所以即使迷宫里存在环也没有任何

hdu 5444 构建二叉树,搜索二叉树

Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 800    Accepted Submission(s): 429 Problem Description Elves are very peculiar creatures. As we all know, they can live for a very

二叉树的搜索

1.正常递归 1 TreeNode* searchBST(TreeNode* root, int val) { 2 if (!root) 3 return nullptr; 4 if (val > root->val) 5 { 6 root = searchBST(root->right, val); 7 } 8 else if (val < root->val) 9 { 10 root = searchBST(root->left, val); 11 } 12 ret