【LeetCode】Binary Tree Inorder Traversal二叉树的中序遍历
来源:互联网 发布:淘宝运费险怎么买 编辑:程序博客网 时间:2024/05/22 14:06
二叉树的中序遍历
给出一棵二叉树,返回其中序遍历
样例
给出二叉树 {1,#,2,3},
1
\
2
/
3
返回 [1,3,2].
挑战
你能使用非递归算法来实现么?
(1)Java
package BinaryTreeTraversal;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */// 中序遍历: left root right ---非递归:用stack实现,需要先放入root,后放入left。而子right应作为新的root重新进入内层循环。public class BinaryTreeInorderTraversal { /* * @param root: A Tree * @return: Inorder in ArrayList which contains node values. */ public List<Integer> inorderTraversal(TreeNode root) { //先将根压栈,将一连串最左节点压栈。在当前子树左节点为null时,将上一个节点(栈顶元素)弹栈,并放入result;然后,再看其右子树(进入递归,让其左节点再次进入内层循环)。 Stack<TreeNode> stack = new Stack<TreeNode>(); List<Integer> result = new ArrayList<Integer>(); TreeNode cur = root; while(cur != null || !stack.empty()){ while(cur != null){//每次进入内层while的cur都是 new root! stack.add(cur); cur = cur.left;//left } //cur == null, 退出while循环 cur = stack.pop();//重新赋值cur为栈顶元素(并弹栈)(此时新root的 left,root遍历ok,还剩right未遍历、新root还未放入result) result.add(cur.val);//并将栈顶元素cur放入result (old left ->没有左节点的 new root) cur = cur.right;// new right -> newest root(再次进入内层循环后,一旦其左节点遍历结束,便再次跳出内层循环) } return result; }}②//Version 2: Recursionpublic class Solution { /* * @param root: A Tree * @return: Inorder in ArrayList which contains node values. */ public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); traverse(root, result); return result; } private void traverse(TreeNode root, List<Integer> result){ if(root == null){ return; } traverse(root.left, result); result.add(root.val); traverse(root.right, result); }}③Divide & Conquer// Version 3: Divide & Conquerpublic class Solution { /* * @param root: A Tree * @return: Inorder in ArrayList which contains node values. */ public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); if(root == null){ return result; } //Divide List<Integer> left = inorderTraversal(root.left); List<Integer> right = inorderTraversal(root.right); //Conquer result.addAll(left); result.add(root.val); result.addAll(right); return result; }}
(2)C++
#include <vector>using namespace std;/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */class Solution { /** * @param root: The root of binary tree. * @return: Inorder in vector which contains node values. */public: vector<int> inorder; void traverse(TreeNode *root) { if (root == NULL) { return; } traverse(root->left); inorder.push_back(root->val); traverse(root->right); } vector<int> inorderTraversal(TreeNode *root) { inorder.clear(); traverse(root); return inorder; // write your code here }};
阅读全文
0 0
- LeetCode Binary Tree Inorder Traversal 中序遍历二叉树
- 94.LeetCode Binary Tree Inorder Traversal(medium)[中序遍历二叉树 树的遍历]
- Binary Tree Inorder Traversal 二叉树的中序遍历
- 二叉树的中序遍历 Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal 二叉树的中序遍历
- LeetCode | Binary Tree Inorder Traversal(二叉树的中序遍历)
- LeetCode—***Binary Tree Inorder Traversal二叉树的中序遍历
- LeetCode OJ 之 Binary Tree Inorder Traversal (二叉树的中序遍历)
- LeetCode 94. Binary Tree Inorder Traversal(二叉树的中序遍历)
- [LeetCode]94. Binary Tree Inorder Traversal--二叉树的中序遍历
- 【LeetCode】Binary Tree Inorder Traversal二叉树的中序遍历
- LeetCode 94 Binary Tree Inorder Traversal(二叉树的中序遍历)+(二叉树、迭代)
- 【leetcode】94Binary Tree Inorder Traversal(非递归中序遍历二叉树)
- LeetCode 94 Binary Tree Inorder Traversal (中序遍历二叉树)
- LeetCode-94-Binary Tree Inorder Traversal 中序遍历二叉树
- Binary Tree Inorder Traversal——二叉树的中序遍历
- LintCode Binary Tree Inorder Traversal 二叉树的中序遍历(非递归)
- Binary Tree Inorder Traversal 二叉树的中序遍历(迭代非递归版本)
- 设计模式C++实现——工厂模式
- 知识产权公证业务构成
- mysql ROOT密码忘记了怎么办
- linux的内核模块介绍
- 关于DrawCall及渲染流程的认识总结
- 【LeetCode】Binary Tree Inorder Traversal二叉树的中序遍历
- Vsftp常用配置
- HCI (主机控制接口(Host Controller Interface))
- C语言实验——计算A+B(顺序结构)
- 192.168.和10.0.开头的IP、内网IP段、IP简介、分类——(IP观止)
- AJAX 简介
- Gauge中文文档(11)—项目实例
- python 编程 入门到实践 6章 字典与嵌套
- ios 之字段排序并且SHA1加密