中序遍历地求解二叉树中从根到叶子结点的所有路径。

来源:百度知道 编辑:UC知道 时间:2024/06/07 03:42:36
中序遍历地求解二叉树中从根到叶子结点的所有路径。

为什么一定要用中序?? 我觉得先序的效率更高些,当然,如果一定用中序的话,换下下面递归函数中的相关语句的顺序即可。
思路:当前节点是么?--〉不是:判断左右子树;若当前节点或左右子树是:将当前节点插入链表。
(只写了功能实现部分)

struct BTree
{
int node;
BTree* pLeft;
BTree* pRight;
};

struct List // 这个链表的目的是记录路径节点,便于调用的函数通过一个链表头指针来处理,你可以不用它,直接cout的
{
int node;
List* pNext;
};

bool IsPath(BTree* pRoot, List** pHead, int leaf)
{
List* pInsert=NULL;

if (pRoot->node==leaf)
{
*pHead=new List;
*pHead->node=leaf;
*pHead->pNext=NULL;

// 记录节点
cout<<"->"<<leaf;

return true;
}

if (pRoot->pLeft)
{
if (IsPath(pRoot->pLeft, pHead, leaf))
{
pInsert=new List;
pInsert->node=pRoot->node;
pInsert->pNext=*pHead;
*pHead=pInsert;