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,null,2,3],

       1
        
         2
        /
       3
    

     

    return [1,3,2].

    Note: Recursive(递归) solution is trivial, could you do it iteratively(迭代)?

    思路:

    解法一:用递归方法很简单,

    (1)如果root为空,则返回NULL;

    (2)如果root->left != NULL,则返回左子树的中序遍历元素;

    (3)如果root->right != NULL, 则返回右子树的中序遍历元素;

    (4)最后,将左子树的中序遍历元素放入容器,root->val放入容器,再将右子树的中序遍历元素放入容器;

    (5)返回容器;

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<int> inorderTraversal(TreeNode* root) {
    13         vector<int> v, v1, v2;
    14         int i;
    15         if(root == NULL)
    16            return v;
    17         if(root->left != NULL)
    18             v1 = inorderTraversal(root->left);
    19         if(root->right != NULL)
    20             v2 = inorderTraversal(root->right);
    21         for(i = 0; i < v1.size(); i++)
    22             v.push_back(v1[i]);
    23         v.push_back(root->val);
    24         for(i = 0; i < v2.size(); i++)
    25             v.push_back(v2[i]);
    26         return v;
    27     }

    解法二:非递归中序遍历二叉树,要定义一个栈(stack)

     1 class Solution {
     2 public:
     3     vector<int> inorderTraversal(TreeNode* root) {
     4         vector<int> v;
     5         stack<TreeNode*> node_stack;
     6         TreeNode* pNode = root;
     7         while((pNode != NULL) || !node_stack.empty()){
     8             //节点不为空,加入栈中,并访问节点左子树
     9             if(pNode != NULL){
    10                 node_stack.push(pNode);
    11                 pNode = pNode->left;
    12             }
    13             else{
    14                 //节点为空,从栈中弹出一个节点,访问这个节点,
    15                 pNode = node_stack.top();
    16                 node_stack.pop();
    17                 v.push_back(pNode->val);
    18                 //访问节点右子树
    19                 pNode = pNode->right;
    20             }
    21         }
    22         return v;
    23     }
    24 };
  • 相关阅读:
    pycharm连接mysql报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope
    Django之视图
    Django模板语言相关内容
    Django使用ORM之多对多(四)
    Django使用ORM之一对多(三)
    018_序列化模块_什么是模块
    017_os_sys_time_collection_random 模块
    015_内置函数2
    014_内置函数
    013_生成器(yield)_列表推导式
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/5723247.html
Copyright © 2011-2022 走看看