zoukankan      html  css  js  c++  java
  • Binary Tree Inorder Traversal-非递归实现中序遍历二叉树

    题目描述:

    给定一颗二叉树,使用非递归方法实现二叉树的中序遍历

    题目来源:
    http://oj.leetcode.com/problems/binary-tree-inorder-traversal/
    题目分析:
    递归到非递归的转换。使用栈描述递归的调用过程,while循环体计算递归程序的计算部分。因为每次while循环只能处理一次递归调用,使用标记记录栈中节点的计算痕迹,例如:用tag记录当前根的调用记录,当根的左右子树均未调用时,令tag值为0,当根的左子树已经调用过时,令tag值为1。
    时间复杂度:O(n) n为节点数
    示例代码:
    vector<int> inorderTraversal(TreeNode *root) {
        stack<TreeNode*> stnode;
        stack<char> sttag;
        vector<int> result;
    
        if(root == NULL)
            return result;
    
        stnode.push(root);
        sttag.push('0');
        while(!stnode.empty()) {
            TreeNode* topnode = stnode.top();
            char toptag = sttag.top();
            if(toptag == '0') {
                sttag.pop();
                sttag.push('1');
                if(topnode->left != NULL) {
                    stnode.push(topnode->left);
                    sttag.push('0');
                }
            } else if(toptag == '1') {
                result.push_back(topnode->val);
                stnode.pop();
                sttag.pop();
                if(topnode->right != NULL) {
                    stnode.push(topnode->right);
                    sttag.push('0');
                }
            }
        }
    
        return result;
    }
  • 相关阅读:
    机器学习之朴素贝叶斯
    机器学习之KNN
    格式化数字
    web.xml中load-on-startup的作用
    ExecutorService线程池
    201404转成 2014.04
    DBCP连接池配置示例
    java 写文本换行
    打印IP 来源
    MySQL分库分表的一些技巧
  • 原文地址:https://www.cnblogs.com/daijinqiao/p/3362546.html
Copyright © 2011-2022 走看看