标签:后序遍历 左右 nic 题目 二叉树 lse https traversal 依次
给定一个二叉树,返回它的中序 遍历。
输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2]
//go //* Definition for a binary tree node. type TreeNode struct { Val int Left *TreeNode Right *TreeNode } var res []int func inorderTraversal(root *TreeNode) []int { res = make([]int, 0) inorder(root) return res } func inorder(root *TreeNode) { if root != nil { inorder(root.Left) res = append(res, root.Val) inorder(root.Right) } }
其核心思想如下:
如要实现前序、后序遍历,只需要调整左右子节点的入栈顺序即可。
//go type ColorNode struct { node *TreeNode color string } func inorderTraversal(root *TreeNode) []int { if root == nil { return []int{} } var res []int var stack []*ColorNode stack = append(stack, &ColorNode{root, "white"}) var cn *ColorNode for len(stack) != 0 { cn = stack[len(stack)-1] stack = stack[:len(stack)-1] // 以上两句等同于 cn = stack.pop() ,别忘了加这句 if cn.color == "white" { // 因为栈是先进后出,所以中序是 右-根-左 的顺序添加 if cn.node.Right != nil { stack = append(stack, &ColorNode{cn.node.Right,"white"}) } stack = append(stack,&ColorNode{cn.node, "gray"}) if cn.node.Left != nil { stack = append(stack, &ColorNode{cn.node.Left, "white"}) } }else { res = append(res, cn.node.Val) } } return res }
地址:https://mp.weixin.qq.com/s/1p7ed_PwC_ctIOW8sFJ-nw
标签:后序遍历 左右 nic 题目 二叉树 lse https traversal 依次
原文地址:https://www.cnblogs.com/smallleiit/p/13444192.html