二叉树中和为某一值的路径

来源:互联网 发布:华泰证券交易软件 编辑:程序博客网 时间:2024/05/29 15:50

1.问题描述

输入一颗二叉树和一个整数,打印出二叉树中的结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(来自《剑指offer》)


2.分析

找到值为某一值的路径,我们知道无非就是树的遍历,但是怎么保存呢?因为树在遍历的时候需要递归,我们可以用栈来保存路径。比如:我们开始遍历 先是根结点 压栈,在是左孩子 压栈,如果左孩子是叶子结点的话,那么我们判断和是不是我们期望的值 如果是那么 打印 栈里面的内容,然后出栈(不管和是不是期望值),在右孩子 压栈,重复上面的过程。这样我们就能得到所有的路径。


3.代码

void FindPath(TreeNode* node,Stack *s,int sum){    if (node == NULL)    {        return;    }        StackNode *snode = (StackNode*)malloc(sizeof(StackNode));        snode->data = node->data;        push(s, snode);        if (!node->lChild && !node->rChild)    {        if (sum == sumOfStack(s)) //对栈内元素求和        {            PrintfStack(s);  //打印栈内元素        }    }        if (node->lChild != NULL)    {        FindPath(node->lChild, s,sum);    }        if (node->rChild != NULL)    {        FindPath(node->rChild, s,sum);    }    pop(s);    }



0 0
原创粉丝点击