欢迎光临365体育在线 - 365体育在线备用 - 365体育投注!

关于我们|网站地图|加入收藏

合作热线:

当前位置:主页 > 新闻 >

数据结构算法面试题精选及整理-二叉树

文章出处:网络整理责任编辑:admin作者:admin人气: 发表时间:2017-10-12 11:54 字体大小:【

                                                              算法的选择和设计遮盖苦差事的数据构造

                                                                                                            by: Ju136

也可以从中学到很多的算法和数据构造,这首要是议论一点点关系上地佛经的信号和算法。并塌下了思绪和信号。首要的电网搜集分类、在面试按次中间的常见问答。性能有限的事物,欢送。。

Note

在本贴纸,仍然信号风骨和高技能的C / C 设计中提到的日,但我不妨说,我的十分重大的,

一句为例。放量增加信号量,意义更浓。譬如:

node *t = new node(); t->data = value; t->left = t->right = NULL;

很明显,在喂,你想将一体变量设定初值。假设它是写在上面的表格。

node *t = new node(); 
t->data = value; 
t->left =NULL;
t->right = NULL;

觉得信号量了,意义不集合。

总之,此信号是集合表达的意义增加信号量

这棵树可能性是一体最常问的成绩,在喂,笔者把一点点根本的知非常多倒退。

在设置按次先发制人,请包含以下纸。提议应用G C 思索。自然,VS也可以帮忙笔者调试。

#include
#include
#include
#include
#include
#include
#include
using namespace std;

二叉树瘤

在喂,笔者用最简略的 struct,只为数据构造的议论,构造不敷。,自然,也可以用类的形成,但你要加很多信号。更多思索构造,在喂都不的多说了。

template
struct node
{
	T data;
	node *left;
	node *right;
};

使被安排好二叉树

当我第一流的写信号,需求使被安排好一体考查树,通常人工控制添加一棵树。上面供给物一种天然产生的产生二叉树的方式。自然,首要因为随机产生方式。增加人工产生树的不便。

在上面的信号级说乔木层的使被安排好。

这事信号简单明了担心:主要成分随机数位产生话说回来决议哪个子树产生。此信号可以许诺产生的树是以程度层。

template
node 创办(int 程度)
{
	if (!程度) return NULL;

	node *t = new node();
	t->data = rand() % 10;  喂为了简略起见,的rand功能的应用,实则,也可以主要成分具体情况处置。
        t->left = t->right = NULL;
	if (1 == 程度) return t;

	int v = rand() % 3;
出轨(V)
	{
		case 0:
			t->left = create(程度 - 1);
			t->right = create(程度 - 1);
			break;
		case 1:
			t->left = create(程度 - 1);
			break;
		case 2:
			t->right = create(程度 - 1);
			break;
		default: break;
	}
	return t;
}

就是损毁树木了。

template
void free_tree(node *t)
{
	if (!t) return;
	free_tree(t->left);
	free_tree(t->right);
	delete t;
}

实则是本着使失败的按次。。

在议论方法应用前序与中序产生二叉树先发制人,笔者率先倒退一点点根本的遍历。

重新提起遍历

信任重新提起遍历是关系上地简略的。,在喂写三重新提起的方式遍历:

template
void front_order(const node *t)
{
	if (!t) return;
	cout << t->data;
	front_order(t->left);
	front_order(t->right);
}

template
void mid_order(node *t)
{
	if (!t) return;
	mid_order(t->left);
	cout << t->data;
	mid_order(t->right);
}

template
void back_order(node *t)
{
	if (!t) return;
	back_order(t->left);
	back_order(t->right);
	cout << t->data;
}

非重新提起达到预期的目的

例如方法使用非重新提起达到预期的目的的?

上面的信号:

template
void 前(结 *t)
{
	if (!t) return;
	stack *> s;
	while (t || !())
	{
		while (t) { cout << t->data; (t); t = t->left;}
		t = (); (); t = t->right;
	}
}

template
void 中期(结 *t)
{
	if (!t) return;
	stack *> s;
	while (t || !())
	{
		while (t) { (t); t = t->left;}
		t = (); (); 
		cout << t->data;
		t = t->right;
	}
}

template
void 回(结 *t)
{
	if (!t) return;
	stack *> s;
	node *pre = NULL;
	while (t || !())
	{
		while (t) { (t); t = t->left;}
		t = ();
		if (t->right == NULL || pre == t->right)
		{
			cout << t->data;
			(); pre = t; t = NULL;
		}
		else t = t->right;
	}
}

言多有失,结论担心信号尽量性。


下一篇:没有了 上一篇:数据结构-二叉树(上)_Chloe

推荐资讯

排行榜

同类文章排行

最新资讯文章

您的浏览历史

    正在加载...