1. 程式人生 > >【劍指offer{23-24}】二叉搜尋樹的後序遍歷序列、二叉樹中和為某一值的路徑

【劍指offer{23-24}】二叉搜尋樹的後序遍歷序列、二叉樹中和為某一值的路徑

二叉搜尋樹的後序遍歷序列、二叉樹中和為某一值的路徑

二叉搜尋樹的後序遍歷序列

題目描述

  • 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。

C++程式碼

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence)
    {
        if(sequence.size()==0)
        {
            return false;
        }
        else
        {
            int len = sequence.size();
            vector<int>left,right;
            int i = 0;
            for(;i<len-1;i++)
            {
                if(sequence[i]<sequence[len-1])
                {
                    left.push_back(sequence[i]);
                }
                else
                {
                    break;
                }
            }
            for(;i<len-1;i++)
            {
                if(sequence[i]>sequence[len-1])
                {
                    right.push_back(sequence[i]);
                }
                else
                {
                    return false;
                }
            }
            bool L = true;
            bool R = true;
            if(left.size()!=0)
            {
                L = VerifySquenceOfBST(left);
            }
            if(right.size()!=0)
            {
                R = VerifySquenceOfBST(right);
            }
            return L && R;
        }
    }
};

二叉樹中和為某一值的路徑

題目描述

  • 輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)

C++程式碼

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) 
    {
        vector<vector<int>>res;
        vector<int>out;
        helper(root,expectNumber,out,res);
        return res;
    }
    void helper(TreeNode*node,int sum,vector<int>&out,vector<vector<int>>&res)
    {
        if(node==NULL)
        {
            return;
        }
        out.push_back(node->val);
        if(sum==node->val && node->left==NULL && node->right==NULL)
        {
            res.push_back(out);
        }
        helper(node->left,sum-node->val,out,res);
        helper(node->right,sum-node->val,out,res);
        out.pop_back();
    }
};