文档章节

C++ 二叉树的描述

wyhuan
 wyhuan
发布于 2016/01/26 11:13
字数 421
阅读 1
收藏 0

/*对二叉树的操作主要通过递归实现,递归能把一个复杂的问题最大程度的简化。以前实现二叉树主要通过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){};

void add(T value)//add element to tree

{

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.add(18);

t.add(12);

t.add(26);

t.add(7);

t.add(16);

t.add(5);

t.add(8);

t.add(14);

t.add(17);

t.sortShow();

// t.remove(26);

// t.sortShow();

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

return 0;

}

© 著作权归作者所有

wyhuan
粉丝 1
博文 171
码字总数 146419
作品 0
大连
私信 提问
几种数据存储结构详解

影响空间规模的几种数据存储结构 正文 所谓数据存储结构,就是数据的元素与元素之间在计算机中的一种表示,它的目的是为了解决空间规模问题,或者是通过空间规模问题从而间接地解决时间规模问...

长平狐
2012/11/12
791
1
剑指offer 19. 二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 思路: 前序遍历,每次交换节点的左右子树;即必须先交换节点的左右子树后,才能继续遍历。 参考答案: C++ Version: Not...

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

更多干货就在我的个人博客 BlackBlog.tech 欢迎关注! 也可以关注我的csdn博客:黑哥的博客 谢谢大家! 网上大部分LeetCode的代码都没有给出注释和解释,对于新手学习很不方便。笔者在这里尽...

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

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

小辰带你看世界
2018/03/20
0
0
C代码报Segmentation fault

自己照着数据结构写了个二叉树的先序遍历: 运行的时候的异常信息如下: clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated bash: line 1: 2401......

润群
2015/12/19
841
5

没有更多内容

加载失败,请刷新页面

加载更多

Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
35分钟前
2
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
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入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

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

小小编辑
今天
2.8K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部