二叉树根节点到叶子节点的所有路径和

1.题目
在这里插入图片描述
2.题解

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
    
    
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int result=0;//存放二叉树根节点到叶子节点的所有路径和
    int sumNumbers(TreeNode* root) {
    
    
        // write code here
        //采用深度优先遍历二叉树,用先序遍历实现二叉树的深度优先遍历
        pre_order(root,0);
        return result;
    }
    //某结点的sum为根节点到该结点组成的数字,根节点的sum为0,因为根节点前无结点。
    void pre_order(TreeNode* root,int sum)
    {
    
    
        if(!root)
            return;
        sum = sum*10 + root->val;//根结点到该结点组成的数字
        if(!root->left && !root->right)//此时root左右结点为NULL,root为叶子结点
            result = result + sum;
        pre_order(root->left,sum);//遍历左子树
        pre_order(root->right,sum);//遍历右子树
    }
};

定义一个变量result来存放二叉树根节点到叶子节点的所有路径和。

采用要采用深度优先来遍历二叉树所有结点,记录下其根结点到某结点组成的数字。当遇到叶子结点时,把根结点到该叶子节点组成的数字累加到result上。
对某个结点的左子树和右子树分别递归进行上述过程。

对二叉树遍历不清楚的,请参考笔者的博文:二叉树的先序中序后序层序遍历C++实现

插一句话:

二叉树的深度优先遍历有:先序遍历、中序遍历、后序遍历。
二叉树的广度优先遍历有:层序遍历

Guess you like

Origin blog.csdn.net/t18438605018/article/details/120834478