zoukankan      html  css  js  c++  java
  • [LeetCode]94.Binary Tree Inorder Traversal

    【题目】

    Given a binary tree, return the inorder traversal of its nodes' values.

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [1,3,2].

    Note: Recursive solution is trivial, could you do it iteratively?

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


    【代码】

    /*********************************
    *   日期:2014-11-17
    *   作者:SJF0115
    *   题号: Binary Tree Inorder Traversal
    *   来源:https://oj.leetcode.com/problems/binary-tree-inorder-traversal/
    *   结果:AC
    *   来源:LeetCode
    *   总结:
    **********************************/
    #include <iostream>
    #include <malloc.h>
    #include <vector>
    #include <stack>
    using namespace std;
    
    struct TreeNode {
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    
    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode *root) {
            vector<int> v;
            if (root == NULL){
                return v;
            }
            // 根节点入栈
            stack<TreeNode*> stack;
            TreeNode* node = root;
            // 遍历
            while(node != NULL || !stack.empty()){
                //遍历左子树
                if(node != NULL){
                    stack.push(node);
                    node = node->left;
                }
                else{
                    //左子树为空,訪问右子树
                    node = stack.top();
                    stack.pop();
                    v.push_back(node->val);
                    node = node->right;
                }
            }
            return v;
        }
    };
    
    //按先序序列创建二叉树
    int CreateBTree(TreeNode* &T){
        char data;
        //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
        cin>>data;
        if(data == '#'){
            T = NULL;
        }
        else{
            T = (TreeNode*)malloc(sizeof(TreeNode));
            //生成根结点
            T->val = data-'0';
            //构造左子树
            CreateBTree(T->left);
            //构造右子树
            CreateBTree(T->right);
        }
        return 0;
    }
    
    int main() {
        Solution solution;
        TreeNode* root(0);
        CreateBTree(root);
        vector<int> v = solution.inorderTraversal(root);
        for(int i = 0;i < v.size();i++){
            cout<<v[i]<<endl;
        }
    }
    



  • 相关阅读:
    jQuery获取鼠标事件源
    windows中MongoDB安装和环境搭建
    前端获取后台数据的方法:ajax、axios、fetch
    浅谈:easy-mock的使用
    安全篇-AES/RSA加密机制
    PHP开发api接口安全验证
    Ajax简单实现文件异步上传的多种方法
    PHP7有没有你们说的那么牛逼
    基于laravel框架构建最小内容管理系统
    redis用法分析
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7291583.html
Copyright © 2011-2022 走看看