go语言中序遍历和前序遍历

120 阅读1分钟

leetcode相关题目基础篇\

前言

二叉树中序遍历的顺序为:

先递归地遍历左子树;
随后遍历根节点;
最后递归地遍历右子树。

递归代码

func inorderTraversal(root *TreeNode) (res []int) {
  var inorder func(node *TreeNode)
  inorder = func(node *TreeNode) {
  	if node == nil {
  		return
  	}
  	inorder(node.Left)
  	res = append(res, node.Val)
  	inorder(node.Right)
  }
  inorder(root)
  return
}

迭代代码

func inorderTraversal(root *TreeNode) (res []int) {
       // 以栈的方式
  stack := []*TreeNode{}
  for root != nil || len(stack) > 0 {
  	for root != nil {
              //入栈添加根节点 ,所有的根节点都会入栈
  		stack = append(stack, root)
  		root = root.Left
  	}
              //出栈即该节点下子树已遍历
  	root = stack[len(stack)-1]
  	stack = stack[:len(stack)-1]
              //出栈时操作
  	res = append(res, root.Val)
              //将右子树入栈
  	root = root.Right
  }
  return
}