對二叉樹進行遍歷時,即將對整個樹的遍歷不斷轉換為對每個結點進行同樣的遍歷。
1.遞迴思想
思路:(1)對根結點進行訪問;
(2)對根結點的左子樹進行先序遍歷;
(3)對根結點的右子樹進行先序遍歷。
**:參考:遞迴遍歷二叉樹
理解**,重點在於理解,先序遍歷對於每個結點,都是先訪問該結點,再訪問其左子樹,再訪問其右子樹。const treenode = ,
right:
},right: ,
right: }};
var preorderrecur = function(root)
list.push(root.val)
preorder(root.left);
preorder(root.right);
}preorder(root);
return list;
}var list = preorderrecur(treenode);
console.log('遞迴前序遍歷', list);
2.迭代思想
一旦對根結點進行訪問,便會接著訪問它的左孩子,接著便會訪問它的左孩子的左孩子… 一直到當前結點的左孩子為空,形成一條左側鏈。接著便會訪問該結點的右子樹 -> 上一層左結點的右子樹 … -> …最後乙個右結點。先自頂向下的訪問左側鏈上的各結點,再自底向上的依次遍歷每一層上的右子樹。即對任意結點進行訪問時,都會先沿著該結點左側分支依次進行訪問。
思路:從整棵二叉樹的根結點開始,對於任意結點d,訪問d結點,若d的右結點不為空,則將d結點的右結點入棧,繼續訪問d的左結點,並對該左結點的左右結點進行同樣的操作。判斷d的左結點是否為空,若為空,則彈出棧頂,若棧為空,則退出演算法。
const treenode = ,
right:
},right: ,
right: }};
var preorder = function(root)
root = root.left;
}if (remstack.length == 0)
root = remstack.pop()
}return list;
}console.log(preorder(treenode));
先序構建二叉樹及先序遍歷二叉樹
先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...
先序構建二叉樹及先序遍歷二叉樹
先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...
二叉樹的先序遍歷
二叉樹先序遍歷遵循 訪問根結點 遍歷其左子樹 遍歷其右子樹 簡單來說就是根 左樹 左樹的左樹 左樹的左樹的左樹 一直遍歷到沒有左樹為止 右樹 如果沒沒有右樹就往上 一直遍歷到右樹的右樹也沒有了 就結束了 class treenode object 初始化樹的 def init self,data 0...