Lintcode 두 갈래 트리의 앞 순서 반복 (귀속 및 비귀속)
2505 단어 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;
}
}
};
질문이 있으면 메시지를 남겨 주세요.
만약 도움이 있으면 하나를 대신해 주십시오. 당신들의 지지는 나의 가장 큰 동력입니다.
문장은 모두 전재할 수 있지만, 문장 링크를 명기해 주십시오. 감사합니다.