树本质属于图的范畴,常见的树的应用中,二叉树居多,这里简单介绍下一般意义的树。
1. 树的实现
struct tree_node{
data_type data;
tree_node* first_child;
tree_node* next_sibling;
}
2. 树的遍历
- 前序遍历:在处理子节点前,处理当前节点,之后再访问子节点;
- 后序遍历:先访问并处理子节点,之后再处理当前节点;
二叉树遍历
中序遍历
// 非递归
func findMode(root *TreeNode) []int {
if nil == root {
return nil
}
stack := list.New()
var pre *TreeNode
maxCnt, cnt := 0, 0
res := make([]int, 0)
for nil != root || 0 != stack.Len() {
if nil != root {
stack.PushBack(root)
root = root.Left
} else {
e := stack.Back()
stack.Remove(e)
t := e.Value.(*TreeNode)
if nil == pre || t.Val == pre.Val {
cnt ++
} else {
cnt = 1
}
if cnt == maxCnt {
res = append(res, t.Val)
} else if (cnt > maxCnt) {
res = make([]int, 0)
res = append(res, t.Val)
maxCnt = cnt
}
pre = t
root = t.Right
}
}
return res
}