优度网站建设,比wordpress更好的网站程序,html5门户网站模版,wordpress的模板在哪里改2024.2.10 题目来源我的题解方法一 递归方式方法二 非递归方式 题目来源
力扣每日一题#xff1b;题序#xff1a;94
我的题解
方法一 递归方式 使用递归实现#xff0c;结果List也可以定义为一个类变量。 按照访问左子树——根节点——右子树的方式遍历这棵树#xff0… 2024.2.10 题目来源我的题解方法一 递归方式方法二 非递归方式 题目来源
力扣每日一题题序94
我的题解
方法一 递归方式 使用递归实现结果List也可以定义为一个类变量。 按照访问左子树——根节点——右子树的方式遍历这棵树而在访问左子树或者右子树的时候我们按照同样的方式遍历直到遍历完整棵树。因此整个遍历过程天然具有递归的性质可以直接用递归函数来模拟这一过程。 时间复杂度O(n) 空间复杂度O(n) public ListInteger inorderTraversal(TreeNode root) {ListInteger resnew ArrayList();inOrder(root,res);return res;
}
public void inOrder(TreeNode root,ListInteger res){if(rootnull){return ;}inOrder(root.left,res);res.add(root.val);inOrder(root.right,res);
}方法二 非递归方式 使用栈来实现中序遍历的非递归方式。先一直往左遍历并使用栈记录经过的节点然后出栈将当前节点加入遍历结果中再看当前节点是否有右子树节点。 时间复杂度O(n) 空间复杂度O(n) public ListInteger inorderTraversal(TreeNode root) {ListInteger resnew ArrayList();if(rootnull)return res;LinkedListTreeNode stacknew LinkedList();TreeNode troot;//没有遍历完或者栈是空的while(t!null||!stack.isEmpty()){//先一路向左while(t!null){stack.push(t);tt.left;}//到最左开始出栈TreeNode tempstack.pop();res.add(temp.val);//再看右边ttemp.right;}return res;
}有任何问题欢迎评论区交流欢迎评论区提供其它解题思路代码也可以点个赞支持一下作者哈~