package com.thirteenday.tree;import java.util.ArrayList;import java.util.List;//前序遍历
/*** 递归三部曲:* 1、确定递归函数的参数和返回值* 2、确定递归终止条件* 3、确定单层递归的逻辑*/
public class PreorderTraversal {/*** 1、确定递归函数的参数和返回值* @param root 树的根节点* @param result 将遍历的结果放在集合中*/private static void preorder(TreeNode root , List<Integer> result){//2、确定递归终止条件if(root == null){return;}//3、确定单层递归的逻辑:前序遍历:根左右result.add(root.val); //根preorder(root.left,result);//左preorder(root.right,result); //右}public static List<Integer> preorderTraversal(TreeNode root){ArrayList<Integer> result = new ArrayList<>();preorder(root,result);return result;}public static void main(String[] args){TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));List<Integer> list = preorderTraversal(root);list.stream().forEach( e -> System.out.println(e+" "));}}
三、中序遍历
package com.thirteenday.tree;import java.util.ArrayList;import java.util.List;//中序遍历
public class InorderTraversal {/*** 1、确定递归函数的参数和返回值* @param root 树的根节点* @param result 将遍历的结果放在集合中*/private static void preorder(TreeNode root , List<Integer> result){//2、确定递归终止条件if(root == null){return;}//3、确定单层递归的逻辑:中序遍历:左根右preorder(root.left,result);//左result.add(root.val); //根preorder(root.right,result); //右}public static List<Integer> inorderTraversal(TreeNode root){ArrayList<Integer> result = new ArrayList<>();preorder(root,result);return result;}public static void main(String[] args){TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));List<Integer> list = inorderTraversal(root);list.stream().forEach( e -> System.out.println(e+" "));}}
四、后序遍历
//后序遍历
public class PostorderTraversal {/*** 1、确定递归函数的参数和返回值* @param root 树的根节点* @param result 将遍历的结果放在集合中*/private static void preorder(TreeNode root , List<Integer> result){//2、确定递归终止条件if(root == null){return;}//3、确定单层递归的逻辑:后序遍历:左右根preorder(root.left,result);//左preorder(root.right,result); //右result.add(root.val); //根}public static List<Integer> postorderTraversal(TreeNode root){ArrayList<Integer> result = new ArrayList<>();preorder(root,result);return result;}public static void main(String[] args){TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));List<Integer> list = postorderTraversal(root);list.stream().forEach( e -> System.out.println(e+" "));}}
CUDA code700(cudaErrorIllegalAddress) 报错与排查方法
最近笔者在调试自己写的 CUDA 代码时, 遇到了 code700(cudaErrorIllegalAddress) 的报错, 在此记录一下排查和解决方法.
报错
报错是由 CUDA API 函数执行时产生的, 由 checkCudaErrors() 函数检测出(CUDA 常用错误检…
看例子怎么用
int main()
{int a 1;int* p a;// 会发生报错// 如果学着 c的风格类型转换int* pp (int*)a;*pp 1; // 编译不报错,但是运行报错// const_castconst int n 5;const std::string s "lalal";// const cast 只针对指针,引用&…