두 갈래 트리 앞 순서 중 순서 뒤 순서 반복 (비귀속)

14242 단어

두 갈래 나무가 앞뒤로 두루 다니다

  • 현재 노드를 인쇄하여 창고에 넣습니다.노드에 왼쪽 트리가 있는 경우 왼쪽 트리에 액세스하여 왼쪽 트리가 없을 때까지 이 단계를 반복합니다
  • 창고 꼭대기 원소의 오른쪽 아이를 방문하고 창고를 나간다.1 작업을 반복합니다.
  • 창고가 비어 있고 바늘이 비어 있을 때 반복해서 끝납니다..
  • class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
            vector<int> arr;
            stack<TreeNode*> sa;
            while(!sa.empty()||root){
                while(root){
                    sa.push(root);
                    arr.push_back(root->val);
                    root=root->left;
                }
                if(!sa.empty())
                {
                	root=sa.top()->right;
                    sa.pop();
                }
            }
            return arr;
        }
    };
    

    두 갈래 나무 사이를 두루 다니다

  • 현재 노드를 창고에 넣습니다.왼쪽 아이가 있는 경우 왼쪽 아이가 없을 때까지 이 단계를 반복합니다
  • 창고 꼭대기 요소를 인쇄하고 창고를 나가며 창고 꼭대기 오른쪽 아이를 방문하고 1단계를 반복합니다
  • 창고가 비어 있고 바늘이 비어 있을 때 반복해서 끝납니다..
  • class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
            vector<int> arr;
            stack<TreeNode*> sa;
            while(!sa.empty()||root){
                while(root){
                    sa.push(root);
                    root=root->left;
                }
                if(!sa.empty())
                {
                    arr.push_back(sa.top()->val);
                    root=sa.top()->right;
                    sa.pop();
                }
            }
            return arr;
        }
    };
    

    두 갈래 나무 뒤가 두루 다니다

  • 현재 노드를 창고에 넣고 이 노드의 표시를 비웁니다.왼쪽 아이가 있는 경우 왼쪽 아이가 없을 때까지 이 단계를 반복합니다
  • 창고 원소를 표시하고 창고 원소를 방문한 오른쪽 아이에게 1단계를 반복합니다.현재 창고 꼭대기 요소가 표시된 경우 창고 꼭대기 요소를 인쇄하고 창고를 나가면 설정 포인터가 비어 있습니다
  • 창고가 비어 있고 바늘이 비어 있으면 반복해서 끝납니다..
  • class Solution {
    public:
        vector<int> postorderTraversal(TreeNode* root) {
            vector<int> arr;
            stack<TreeNode*> sa;
            vector<int> maze;
            while(!sa.empty()||root)
            {
                while(root)
                {
                    sa.push(root);
                    maze.resize(sa.size()+1);
                    maze[sa.size()]=0;
                    root=root->left;    
                }
                while(!sa.empty()&&maze[sa.size()]==1)// 
                {
                    root=sa.top();
                    arr.push_back(root->val);
                    sa.pop();
                    root=NULL;
                }
                if(!sa.empty())
                {
                    maze[sa.size()]=1;// 
                    root=sa.top()->right;
                }
            }
            return arr;
        }
    };
    

    좋은 웹페이지 즐겨찾기