二叉树模板!

 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define N 30
 6 using namespace std;
 7
 8 struct tree
 9 {
10     int data;
11     tree *parent;
12     tree *left;
13     tree *right;
14 };
15
16 tree* creat(int data)
17 {
18     tree *p=(tree *)malloc(sizeof(tree));
19     p->data=data;
20     return p;
21 }
22
23 tree* find(const tree *p,int data)
24 {
25     if(p==NULL) return 0;
26     if(data==p->data) return (tree *) p;
27     else if(data<p->data) return find(p->left,data);
28     else return find(p->right , data);
29
30 }
31
32 int sumnode(const tree* p)
33 {
34     if(p==NULL) return 0 ;
35     return 1+sumnode(p->left)+sumnode(p->right);
36 }
37
38 int high(const tree* p)
39 {
40     int left ,right;
41     if(p==NULL)
42         return 0 ;
43     left=high(p->left);
44     right=high(p->right);
45     return (left>right) ? (left+1) : (right+1);
46 }
47
48 void print(const tree *p)
49 {
50     if(p!=NULL)
51     {
52         print(p->left);
53         cout<<p->data<<endl;
54         print (p->right );
55     }
56 }
57
58 int main()
59 {
60     //freopen("ACM.txt","r",stdin);
61
62
63 }

时间: 2024-09-30 21:30:25

二叉树模板!的相关文章

BinTree::定义

二叉树结点定义: #define BinNodePosi(T) BinNode<T>* //节点位置 #define stature(p) ((p) ? (p)->height : -1) //节点高度(与"空树高度为-1"的约定相统一) typedef enum { RB_RED, RB_BLACK} RBColor; //节点颜色 template <typename T> struct BinNode { //二叉树节点模板类 // 成员(为简化描述

c++实现二叉树笔记(模板实现)(三)

学习了树的知识,简单的做了记录,只是基本的罗列和实现. 二叉树是树的一种特殊形式,每个节点都有左右两棵子树.有关基本的概念:度,高度(深度),还有满二叉树(特殊的完全二叉树),完全二叉树. 1.对于二叉树的数据存储结构:有顺序存储和链式存储. 顺序存储更适合完全二叉树,否则浪费存储空间.所以链式存储结构更普遍.. 2.二叉树的基本操作: 确定它的高度,元素数目,复制,打印,删除等基本操作, 像打印,复制这些操作都可以通过遍历二叉树来实现. 3.c++模板代码实现: 见github:https:/

[数据结构]二叉树之二叉链表的类模板实现

该类模板实现了一个二叉树的模板类,采用二叉链表实现. 定义二叉树节点类,采用二叉链表实现. ///////////////////////// #include <iostream> #include <cstdlib> #include <stack> #include <deque> using namespace std; template<class T> struct BinTreeNode //二叉树节点类的定义,使用二叉链表 { T

二叉树的模板 先序建立 二叉树的遍历 深度

关于二叉树,基本操作都是在递归的基础上完成的,二叉树的层次遍历是队列实现.具体解释看代码 #include<iostream> #include<stack> #include<queue> #include<stdio.h> #include<stdlib.h> using namespace std; //二叉树结点 typedef struct BiTNode { //数据 char data; //左右孩子指针 struct BiTNod

【算法模板】二叉树

模板: 1.先序遍历三种方法 1)迭代: class Solution { public: /** * @param root: The root of binary tree. * @return: Preorder in vector which contains node values. */ vector<int> preorderTraversal(TreeNode *root) { vector<int> res; stack<TreeNode*> stac

C++实现二叉树,运用模板,界面友好,操作方便 运行流畅

//.h文件 #ifndef TREE_H #define TREE_H #include<iostream> #include<iomanip> using namespace std; template<typename T> struct Node //树结点 { T data; Node<T> *left, *right; Node(const T& item); }; template<typename T> Node<T

二叉树遍历模板(递归,非指针)

前序遍历: void search(int x) cout<<a[x].self; if(a[x].left!=-1)search(a[x].left); if(a[x].right!=-1) search(a[x].right); 中序遍历:

【模板】树转二叉树

转换方法其实就让每一个结点的第一个子结点做左结点(如果没有则左结点为空),右边的兄弟结点做自己的右结点(如果没有则右结点为空). int a[MAX_N][MAX_N], cnt[MAX_N]; int lt[MAX_N], rt[MAX_N]; void Update(int x) { if(!cnt[x]) return; lt[x] = a[x][1]; for(register int i = 2, j = lt[x]; i <= cnt[x] + 1; ++i, j = rt[j])

c++类模板之间友元函数调用

1 #include <stdio.h> 2 #include <iostream> 3 4 using namespace std; 5 6 template<typename T> class BTree; 7 8 /***************************节点类模板*********************************/ 9 template<typename T> 10 class BTreeNode{ 11 friend