【微软面试一百题:4】在二元树中找出和为某一值的所有路径

题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。
例如输入整数 22 和如下二元树
10
/
5 12
/ \
4 7
则打印出两条路径:10, 12 和 10, 5, 7

hint: 借助 数组 模拟 Stack
#include <iostream>
#include <string>
using namespace std;

struct BSTreeNode
{
    int value;
    BSTreeNode *left;
    BSTreeNode *right;
};

void AddBSTreeNode(BSTreeNode * &pCurrent,int value){
    if (NULL==pCurrent) {
        BSTreeNode * newNode = new BSTreeNode;
        newNode->left=NULL;
        newNode->right=NULL;
        newNode->value = value;
        pCurrent = newNode;
    }else{
        if (pCurrent->value>value) {
            AddBSTreeNode(pCurrent->left, value);
        }else if (pCurrent->value<value)
            AddBSTreeNode(pCurrent->right, value);
        
    }
}
void printPath(int path[],int size){
    for (int i=0; i<size ; i++) {
        cout<<path[i]<<endl;
    }
    cout<<endl;
}

void printRoute(BSTreeNode *root,int sum,int path[],int top){
    path[top++]=root->value;
    sum-=root->value;
    if (root->left==NULL&&root->right==NULL) {
        if (sum==0) {
            printPath(path,top);
        }
    }else{
        if (root->left!=NULL)
            printRoute(root->left, sum, path, top);
        if (root->right!=NULL)
            printRoute(root->right, sum, path, top);
    }
    top--;
    sum+=root->value;
}
int main()
{
    BSTreeNode * root = NULL;
    
    AddBSTreeNode(root, 10);
    AddBSTreeNode(root, 5);
    AddBSTreeNode(root, 4);
    AddBSTreeNode(root, 7);
    AddBSTreeNode(root, 12);
 
    
    int path[100];
    printRoute(root, 22, path, 0);
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,371评论 0 19
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,355评论 0 25
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,531评论 0 14
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,170评论 1 1
  • 编译环境:python v3.5.0, mac osx 10.11.4 前述内容: 线性表 队列 堆栈 线性结构...
    掷骰子的求阅读 2,507评论 1 7