• Solve Tree Problems Recursively


    "Top-down" Solution

    Here is the pseudocode for the recursion function maximum_depth(root, depth):

    1. return if root is null
    2. if root is a leaf node:
    3.      answer = max(answer, depth)         // update the answer if needed
    4. maximum_depth(root.left, depth + 1)      // call the function recursively for left child
    5. maximum_depth(root.right, depth + 1)     // call the function recursively for right child
    

      

     code:
    int answer;		       // don't forget to initialize answer before call maximum_depth
    void maximum_depth(TreeNode* root, int depth) {
        if (!root) {
            return;
        }
        if (!root->left && !root->right) {
            answer = max(answer, depth);
        }
        maximum_depth(root->left, depth + 1);
        maximum_depth(root->right, depth + 1);
    }
    

      

    "Bottom-up" Solution

    1. return 0 if root is null                 // return 0 for null node
    2. left_depth = maximum_depth(root.left)
    3. right_depth = maximum_depth(root.right)
    4. return max(left_depth, right_depth) + 1  // return depth of the subtree rooted at root
    

      

    code:

    int maximum_depth(TreeNode* root) {
    	if (!root) {
    		return 0;                                 // return 0 for null node
    	}
    	int left_depth = maximum_depth(root->left);	
    	int right_depth = maximum_depth(root->right);
    	return max(left_depth, right_depth) + 1;	  // return depth of the subtree rooted at root
    }
    

      

    Conclusion.

    It is not easy to understand recursion and find out a recursion solution for the problem.

    When you meet a tree problem, ask yourself two questions: can you determine some parameters to help the node know the answer of itself? Can you use these parameters and the value of the node itself to determine what should be the parameters parsing to its children? If the answers are both yes, try to solve this problem using a "top-down" recursion solution.

    Or you can think the problem in this way: for a node in a tree, if you know the answer of its children, can you calculate the answer of the node? If the answer is yes, solving the problem recursively from bottom up might be a good way.

    In the following sections, we provide several classic problems for you to help you understand tree structure and recursion better.

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    每日英语:Here's Why You Won't Finish This Article
    每日英语:'Still Out Of Work?' How To Handle Holiday Small Talk
    每日英语:How to Spend Christmas in Asia
    每日英语:Losing It at the Movies: Silly Beats Sober in China's Box Office
    每日英语:How Do iPhone Photos Impact Our Experience?
    一种使用CSS固定表头和列的方法
    一个asp.net中使用的flash展示控件
    gridview中cell的选择和编辑
    asp.net 2.0中的profile对象简介
    gridview中使用方向键标记选中行
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9996766.html
Copyright © 2020-2023  润新知