## C++ 二叉树的描述 原

wyhuan

/*对二叉树的操作主要通过递归实现，递归能把一个复杂的问题最大程度的简化。以前实现二叉树主要通过C语言实现的，现在正在学习CORE C++，故决定用C++重新实现...*/

#ifndef _TREE_H_

#define _TREE_H_

#include <iostream>

using namespace std;

template <typename T> class Tree //binary sort tree

{

struct Node

{

T data;

Node *left;

Node *right;

};

Node *root;

public:

Tree():root(NULL){};

{

Node *n = new Node;

n->data = value;

n->left = NULL;

n->right = NULL;

insert(root,n);

}

void show(){ preShow(root); cout<<endl;};//preorder search

void sortShow(){ midShow(root); cout<<endl;};//midorder search

void clear(){ clearTree(root);};//clear the tree

int count(){//calculate the node's count of tree

return count(root);

}

int height(){ return height(root); } //calculate height of tree

void remove(T value)//remove a element from tree

{

Node *&n = find(root,value);

Node *p = n;

if(n == NULL) return;

insert(n->right,n->left);

n = n->right;

delete p;

}

~Tree()

{

clear();

}
private:

void insert(Node *&root,Node *&d)

{

if(root == NULL) root = d;

else if(d->data < root->data)

insert(root->left,d);

else

insert(root->right,d);

}

void preShow(Node *root)

{

if(root == NULL)

{

return;

}

cout<<root->data<<' ';

preShow(root->left);

preShow(root->right);

}

void midShow(Node *root)

{

if(root == NULL)

{

return;

}

midShow(root->left);

cout<<root->data<<' ';

midShow(root->right);

}

void clearTree(Node *&root)

{

if(root == NULL) return;

Node *tree = root;

clearTree(root->left);

clearTree(root->right);

delete tree;

root = NULL;

}

int count(Node *&root)

{

if(root == NULL) return 0;

return count(root->left)+count(root->right)+1;

}

Node *& find(Node *&root,T value)

{

if(root == NULL) return root;

if(root->data == value) return root;

else if(value < root->data)

find(root->left,value);

else

find(root->right,value);

}

int height(Node *root)

{

if(root == NULL) return 0;

int lh,rh;

lh=height(root->left);

rh=height(root->right);

return (lh>=rh?lh:rh)+1;

}

};

#endif

/*===============测试代码================*/

// TreeTest.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "tree.h"

int main(int argc, char* argv[])

{

Tree<int> t;

t.sortShow();

// t.remove(26);

// t.sortShow();

cout<<"the count is:"<<t.count()<<" the height:"<<t.height()<<endl;

return 0;

}

### wyhuan

2012/11/12
791
1

dby_freedom
01/04
0
0
LeetCode算法练习——深度优先搜索 DFS

BlackBlog__
2018/07/30
0
0
C语言/C++编程学习数据结构与算法 通俗易懂讲解 快速排序

C语言是面向过程的，而C＋＋是面向对象的 C和C++的区别： C是一个结构化语言，它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程，对输入（或环境条件）进行运算处理得到...

2018/03/20
0
0
C代码报Segmentation fault

2015/12/19
841
5

Xss过滤器（Java）

35分钟前
2
0
Navicat 快捷键

7
0
Set 和 Map

Set 1：基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

1
0
PyTorch入门笔记一

5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单（2019）请戳（这里） 【今日歌曲】 @花间小酌：#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌，请使劲儿戳（这里） @批判派...

2.8K
19