数据结构与算法面试题二叉树路径查找

Posted zhiyong_will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法面试题二叉树路径查找相关的知识,希望对你有一定的参考价值。

题目来源“数据结构与算法面试题80道”。

问题分析:核心是树的遍历,注意题目中“路径”的定义,是从根节点到叶子节点。先序遍历正好是从根节点开始,因此可以利用先序遍历的过程来实现这个过程。

方法:

void print_vector(vector<BinaryTreeNode *> &v)
	vector<BinaryTreeNode *>::iterator it;
	for (it = v.begin(); it != v.end(); it ++)
		printf("%d\\t", (*it)->m_nValue);
	
	printf("\\n");


void pre_order_route(BinaryTreeNode *p, int num, vector<BinaryTreeNode *> &q, int &current)
	if (NULL == p) return;

	current += p->m_nValue;
	q.push_back(p);

	bool is_leaf = (NULL == p->m_pLeft) && (NULL == p->m_pRight);

	if (current == num && is_leaf)
		print_vector(q);
	
	
	if (NULL != p->m_pLeft)
		pre_order_route(p->m_pLeft, num, q, current);
	

	if (NULL != p->m_pRight)
		pre_order_route(p->m_pRight, num, q, current);
	
	
	current -= (*(q.end() - 1))->m_nValue;
	q.pop_back();



void print_route(BinaryTreeNode *root, int num)
	vector<BinaryTreeNode *> q;// 用队列保存已经访问过的节点
	int current = 0;
	pre_order_route(root, num, q, current);

以上是关于数据结构与算法面试题二叉树路径查找的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法面试题二叉树镜像

数据结构与算法面试题二叉树镜像

Java集合与数据结构——二叉树02

二叉树相关面试题数据结构

经典面试题二二叉树的递归与非递归遍历(前序中序后序)

二叉树算法,你懂吗?