1. 程式人生 > >經典演算法學習——求二叉樹節點和為sum的路徑

經典演算法學習——求二叉樹節點和為sum的路徑

       在一棵二叉樹中,有多少個葉子節點,就會有多少條從根節點到葉子節點的路徑。如果給每一個節點一個data值,那麼每一條路徑經過的節點data加起來就為sum,現在根據給定的sum,請找出有哪些路徑符合這個sum。程式碼上傳至 https://github.com/chenyufeng1991/BinaryTreePath  。

       整體思路就是遞迴的去檢索,每當經過一個節點的時候,就把節點值放入vector中,當到達葉子節點時,判斷此時vector中的和是否等於給定sum,等於的話表示這是一條符合條件的路徑,列印該路徑。否則清空vector,繼續檢索。

核心程式碼如下:

void PathLength(Node *node, vector<int> &vec, int sum)
{
    if (node == NULL)
    {
        return;
    }

    if (node ->lChild != NULL)
    {
        vec.push_back(node->data);
        PathLength(node->lChild,vec,sum);
    }

    if (node ->rChild != NULL)
    {
        vec.push_back(node->data);
        PathLength(node->rChild,vec,sum);
    }

    if (node ->lChild == NULL || node ->rChild == NULL)
    {
        vec.push_back(node->data);
        int length = 0;
        for (int i = 0; i < vec.size(); i++)
        {
            length += vec[i];
        }

        if (length == sum)
        {
            for (int i = 0; i < vec.size(); i++)
            {
                cout << vec[i] << " ";
            }
            cout << endl;
        }
        vec.clear();
    }
}