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 };
时间: 2024-08-14 08:56:03

Leetcode 94. Binary Tree Inorder Traversal (中序遍历二叉树)的相关文章

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? 题目链接:https://leetcode.com/problems/binary-t

LeetCode 144 Binary Tree Preorder Traversal (先序遍历二叉树)

Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [1,2,3]. Note: Recursive solution is trivial, could you do it iteratively? 题目链接:https://leetcode.com/problems/binary-tre

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? > rea

leetcode 94 Binary Tree Inorder Traversal ----- java

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? 求二叉树的中序遍历,要求不是用递归. 先用递归做一下,很简单. /** * Defini

Leetcode 94 Binary Tree Inorder Traversal 二叉树

二叉树的中序遍历,即左子树,根, 右子树 1 /** 2 * Definition for binary tree 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 void dfs(vect

Leetcode #94 Binary Tree Inorder Traversal

题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/ (非递归实现)二叉树的中序遍历. 1 class Solution 2 { 3 public: 4 vector<int> inorderTraversal(TreeNode *root) 5 { 6 vector<int> output; 7 if(root == NULL) 8 { 9 return output; 10 } 11 12 stack

LeetCode 94 Binary Tree Inorder Traversal(二叉树的中序遍历)+(二叉树、迭代)

翻译 给定一个二叉树,返回其中序遍历的节点的值. 例如: 给定二叉树为 {1, #, 2, 3} 1 2 / 3 返回 [1, 3, 2] 备注:用递归是微不足道的,你可以用迭代来完成它吗? 原文 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: Recursi

leetcode 94.Binary Tree Inorder Traversal 二叉树的中序遍历

递归算法C++代码: 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> in

[LeetCode] 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