Lintcode 두 갈래 트리의 앞 순서 반복 (귀속 및 비귀속)

두 갈래 나무를 주어 노드의 값을 되돌려줍니다.
당신은 실제 면접에서 이 문제를 만난 적이 있습니까? 
Yes
예제
두 갈래 나무 한 그루{1,#,2,3}를 주고,
   1
    \
     2
    /
   3

되돌아오다[1,2,3].
도전하다
당신은 비귀속 실현을 사용할 수 있습니까?
라벨
귀속 두 갈래 나무 두 갈래 나무 비귀속
1. 귀속 형식:
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: The root of binary tree.
     * @return: Preorder in vector which contains node values.
     */
     void pre(vector &result,TreeNode *root){
         result.push_back(root->val);
         if(root->left!=NULL)
         pre(result,root->left);
         if(root->right!=NULL)
         pre(result,root->right);
     }
    vector preorderTraversal(TreeNode *root) {
        // write your code here
        vector  result;
        if(root==NULL)
        return result;
        pre(result,root);
        return result;
    }
};

2. 비귀속 형식:
오른쪽 노드를 누비지 않은 위치를 창고로 기록합니다.
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: The root of binary tree.
     * @return: Preorder in vector which contains node values.
     */
    vector preorderTraversal(TreeNode *root) {
        // write your code here
        vector result;
        stack s;
        if(root==NULL)
        return result;
        while(1){
            if(root!=NULL)
            result.push_back(root->val);
            if(root->right!=NULL)
            s.push(root);
            if(root->left!=NULL)
            root=root->left;
            else if(!s.empty())
            {
            root=s.top()->right;
            s.pop();
            }
            else
            break;
            
        }
        
    }
};

질문이 있으면 메시지를 남겨 주세요.
만약 도움이 있으면 하나를 대신해 주십시오. 당신들의 지지는 나의 가장 큰 동력입니다.
문장은 모두 전재할 수 있지만, 문장 링크를 명기해 주십시오. 감사합니다.

좋은 웹페이지 즐겨찾기